Python數(shù)據(jù)分析工具:Pandas_Part 2

序言:

????今天不截圖碍讯,嘗試下純代碼編輯效果會不會看起來舒服一些


【課程2.7】 時間模塊:datetime

????datetime模塊捉兴,主要掌握:datetime.date(), datetime.datetime(), datetime.timedelta()
????日期解析方法:parser.parse

datetime.date:date對象
import datetime # 也可以寫 from datetime import date

today = datetime.date.today()
print(today, type(today))
print(str(today), type(str(today)))
# datetime.date.today 返回今日
# 輸出格式為 date類

t = datetime.date(2016, 6, 1)
print(t)
# (年倍啥,月,日) -> 直接得到當(dāng)時日期
datetime.datetime: datetime 對象
now = datetime.datetime.now()
print(now, type(now))
print(str(now), type(str(now)))
# .now()方法始藕,輸出當(dāng)前時間
# 輸出格式為 datetime類
# 可通過str()轉(zhuǎn)化為字符串

t1 = datetime.datetime(2016,6,1)
t2 = datetime.datetime(2014,1,1,12,44,33)
print(t1, t2)
# (年鳄虱,月,日决记,時,分建车,秒)椒惨,至少輸入年月日

t2 - t1
# 相減得到時間差   —— timedelta
parser.parse:日期字符串轉(zhuǎn)換
from dateutil.parser import parse

date = "13-03-2018"
t = parse(date)
print(t, type(t))
# 直接將str轉(zhuǎn)化成datetime.datetime

print(parse("2000-1-1"), "\n",
     parse("5/1/2014"), "\n",
     parse("5/1/2014", dayfirst = True), "\n", # 國際通用格式中领斥,月/日/年月洛,可以通過dayfirst來設(shè)置
     parse("22/1/2014"), "\n",
     parse("Jan 31, 1997 10:45 PM")) 
# 各種格式可以解析孽锥,但無法支持中文


【課程2.8】 Pandas時刻數(shù)據(jù):Timestamp

????時刻數(shù)據(jù)代表時間點惜辑,是pandas的數(shù)據(jù)類型盛撑,是將值與時間點相關(guān)聯(lián)的最基本類型的時間序列數(shù)據(jù)
????pandas.Timestamp()

pd.Timestamp()
import numpy as np
import pandas as pd


date1 = datetime.datetime(2016,12,1,12,45,30) # 創(chuàng)建一個datetime.datetime
date2 = "2017-12-21" # 創(chuàng)建一個字符串
t1 = pd.Timestamp(date1)
t2 = pd.Timestamp(date2)
print(t1, type(t1))
print(t2, type(t2))
print(pd.Timestamp("2017-12-21 15:00:22"))
# 直接生成pandas的時刻數(shù)據(jù) -> 時間戳
# 數(shù)據(jù)類型為 pandas的Timestamp
pd.to_datetime
from datetime import datetime

date1 = datetime(2016,12,1,12,45,30)
date2 = "2018-03-14"
t1 = pd.to_datetime(date1)
t2 = pd.to_datetime(date2)
print(t1, type(t1))
print(t2, type(t2))
# pd.to_datetime():如果是單個時間數(shù)據(jù)撵彻,轉(zhuǎn)換成pandas的時刻數(shù)據(jù)轴合,數(shù)據(jù)類型為Timestamp

lst_date = ['2017-12-21', '2017-12-22', '2017-12-23']
t3 = pd.to_datetime(lst_date)
print(t3, type(t3))
# 多個時間數(shù)據(jù)受葛,將會轉(zhuǎn)換為pandas的DatetimeIndex
pd.to_datetime -> 多個時間數(shù)據(jù)轉(zhuǎn)換時間戳索引

date1 = [datetime(2015,6,1),datetime(2015,7,1),datetime(2015,8,1),datetime(2015,9,1),datetime(2015,10,1)]
date2 = ['2018-2-1','2018-2-2','2018-2-3','2018-2-4','2018-2-5','2018-2-6']
print(date1)
print(date2)
t1 = pd.to_datetime(date1)
t2 = pd.to_datetime(date2)
print(t1)
print(t2)
# 多個時間數(shù)據(jù)轉(zhuǎn)換為 DatetimeIndex

date3 = ['2018-2-1','2018-2-2','2018-2-3', 'hello world!', '2018-2-4','2018-2-5','2018-2-6']
t3 = pd.to_datetime(date3, errors = "ignore")
print(t3, type(t3))
# 當(dāng)一組時間序列中夾雜其他格式數(shù)據(jù)总滩,可用errors參數(shù)返回
# errors = "ignore": 不可解析時返回原始輸入闰渔,這里就是直接生成一般數(shù)組

t4 = pd.to_datetime(date3, errors = "coerce")
print(t4, type(t4))
# errors = 'coerce':不可擴展铐望,缺失值返回NaT(Not a Time),結(jié)果認為DatetimeIndex


【課程2.9】 Pandas時間戳索引:DatetimeIndex

????核心:pd.date_range()

pd.DatetimeIndex()與TimeSeries時間序列

rng = pd.DatetimeIndex(['2018-2-1','2018-2-2','2018-2-3', '2018-2-4', "2018-2-5"])
print(rng, type(rng))
print(rng[0], type(rng[0]))
# 直接生成時間戳索引营曼,支持str蒂阱、datetime.datetime
# 單個時間戳為Timestamp蒜危,多個時間戳為DatetimeIndex

st = pd.Series(np.random.rand(len(rng)), index = rng)
print(st, type(st))
print(st.index)
# 以DatetimeIndex為index的Series辐赞,為TimeSeries响委,時間序列

pd.date_range()-日期范圍:生成日期范圍
2種生成方式:①start + end赘风; ②start/end + periods
默認頻率:day

rng1 = pd.date_range("1/1/2017", "1/10/2017", normalize = True)
rng2 = pd.date_range(start = "1/1/2017", periods = 10)
rng3 = pd.date_range(end = "1/30/2017 15:00:00", periods = 10) # 增加了時邀窃、分假哎、秒
print(rng1, type(rng1))
print(rng2)
print(rng3)
print("-------------")
# 直接生成DatetimeIndex
# pd.date_range((start=None, end=None, periods=None, freq='D', tz=None, normalize=False, name=None, closed=None, **kwargs)
# start:開始時間
# end:結(jié)束時間
# periods:偏移量
# freq:頻率舵抹,默認天,pd.date_range()默認頻率為日歷日扇救,pd.bdate_range()默認頻率為工作日
# tz:時區(qū)

rng4 = pd.date_range(start = "1/1/2017 15:30", periods = 10, name = "hello world!", normalize = True)
print(rng4)
print("----------------")
# normalize:時間參數(shù)值正則化到午夜時間戳(這里最后就直接變成0:00:00,并不是15:30:00)
# name:索引對象名稱

print(pd.date_range("20170101", "20170104")) # 20170101也可讀取
print(pd.date_range("20170101", "20170104", closed = "right")) # 左開右閉
print(pd.date_range("20170101", "20170104", closed = "left")) # 左閉右開
print("----------------")
# closed:默認為None的情況下沧烈,左閉右閉饱岸,left則左閉右開苫费,right則左開右閉

print(pd.bdate_range("20170101", "20170107"))
# pd.bdate_range()默認頻率為工作日

print(list(pd.date_range(start = "1/1/2017", periods = 10)))
# 直接轉(zhuǎn)化為list百框,元素為Timestamp


pd.date_range()-日期范圍:頻率(1)

print(pd.date_range("2017/1/1", "2017/1/4")) # 默認freq = "D":每日歷日
print(pd.date_range("2017/1/1", "2017/1/4", freq = "B")) # B:每工作日
print(pd.date_range("2017/1/1", "2017/1/2", freq = "H")) # H:每小時
print(pd.date_range("2017/1/1 12:00", "2017/1/1 12:10", freq = "T")) # T/MIN:每分
print(pd.date_range("2017/1/1 12:00", "2017/1/1 12:00:10", freq = "S")) # S:每秒
print(pd.date_range("2017/1/1 12:00", "2017/1/1 12:00:10", freq = "L")) # L:每毫秒(千分之一秒)
print(pd.date_range("2017/1/1 12:00", "2017/1/1 12:00:10", freq = "U")) # L:每微秒(百萬分之一秒)

print(pd.date_range("2017/1/1", "2017/2/1", freq = "W-MON"))
# W-MON:從指定星期幾開始算起柬泽,每周
# 星期幾縮寫:MON/TUE/WED/THU/FRI/SAT/SUN

print(pd.date_range("2017/1/1", "2017/5/1", freq = "WOM-2MON"))
#  WOM-2MON:每月的第幾個星期幾開始算锨并,這里是每月第二個星期一

pd.date_range()-日期范圍:頻率(2)

print(pd.date_range("2017", "2018", freq = "M"))
print(pd.date_range("2017", "2020", freq = "Q-DEC"))
print(pd.date_range("2017", "2020", freq = "A-DEC"))
print("-----------")
# M:每月最后一個日歷日
# Q-月:指定月為季度末第煮,每個季度末最后一月的最后一個日歷日
# A-月:每年指定月份的最后一個日歷日
# 月縮寫:JAN/FEB/MAR/APR/MAY/JUN/JUL/AUG/SEP/OCT/NOV/DEC
# 所以Q-月只有三種情況:1-4-7-10,2-5-8-11,3-6-9-12

print(pd.date_range("2017", "2018", freq = "BM"))
print(pd.date_range("2017", "2020", freq = "BQ-DEC"))
print(pd.date_range("2017", "2020", freq = "BA-DEC"))
print("-----------")
# BM:每月最后一個工作日
# BQ-月:指定月為季度末,每個季度末最后一月的最后一個工作日
# BA-月:每年指定月份的最后一個工作日

print(pd.date_range("2017", "2018", freq = "MS"))
print(pd.date_range("2017", "2020", freq = "QS-DEC"))
print(pd.date_range("2017", "2020", freq = "AS-DEC"))
print('------')
# M:每月第一個日歷日
# Q-月:指定月為季度末害晦,每個季度末最后一月的第一個日歷日
# A-月:每年指定月份的第一個日歷日

print(pd.date_range('2017','2018', freq = 'BMS'))  
print(pd.date_range('2017','2020', freq = 'BQS-DEC'))  
print(pd.date_range('2017','2020', freq = 'BAS-DEC')) 
print('------')
# BM:每月第一個工作日
# BQ-月:指定月為季度末壹瘟,每個季度末最后一月的第一個工作日
# BA-月:每年指定月份的第一個工作日

pd.date_range()-日期范圍:復(fù)合頻率
print(pd.date_range('2017/1/1', '2017/2/1', freq = '7D'))  # 7天
print(pd.date_range("2017/1/1", "2017/1/2", freq = "2H30MIN")) # 2小時30分鐘
print(pd.date_range('2017','2018', freq = '2M'))  # 2月俐筋,每月最后一個日歷日

asfreq:時期頻率轉(zhuǎn)換


ts = pd.Series(np.random.rand(4), 
              index = pd.date_range("20170101", "20170104"))
print(ts)
print(ts.asfreq("4H", method = "ffill"))
# 改變頻率澄者,這里是D改為4H
# method:插值模式粱挡,None不插值俄精,ffill用之前值填充嫌套,bfill用之后值填充

pd.date_range()-日期范圍:超前/滯后數(shù)據(jù)

ts = pd.Series(np.random.rand(4),
              index = pd.date_range("20170101", "20170104"))
print(ts)

print(ts.shift(2))
print(ts.shift(-2))
# 正數(shù):數(shù)值后移(滯后);負數(shù):數(shù)值前移(超前)

per = ts/ts.shift(1) - 1
print(per)
print("------------")
# 計算變化百分比魏蔗,這里計算:該時間戳與上一個時間戳相比,變化百分

print(ts.shift(2, freq = "D"))
print(ts.shift(2, freq = "T"))
# 加上freq參數(shù):對時間戳進行位移谣旁,而不是對數(shù)值進行位移


【課程2.10】 Pandas時期:Period

????核心:pd.Period()

pd.Period()創(chuàng)建時期
p = pd.Period("2017", freq = "M")
print(p, type(p))
# 生成一個以2017-01開始榄审,月為頻率的時間構(gòu)造器
# pd.Period()參數(shù):一個時間戳 + freq 參數(shù) -> freq 用于指明該 period 的長度,時間戳則說明該 period在時間軸上的位置


print(p + 1)
print(p - 2)
print(pd.Period("2012", freq = "A-DEC") -1)
# 通過加減整數(shù)角溃,將周期整體移動
# 這里按照 月减细、年 移動
# Period('2012', freq = 'A-DEC')可以看成多個時間期的時間段中的游標(biāo)
pd.period_range()創(chuàng)建時期范圍
prng = pd.period_range("1/1/2011", "1/1/2012", freq = "M")
print(prng, type(prng))
print(prng[0], type(prng[0]))
# 數(shù)據(jù)格式為PeriodIndex驮吱,單個數(shù)值為Period

ts = pd.Series(np.random.rand(len(prng)), index = prng)
print(ts, type(ts))
print(ts.index)
# 時間序列

# Timestamp表示一個時間戳左冬,是一個時間截面拇砰;Period是一個時期,是一個時間段G砬弧瑰枫!但兩者作為index時區(qū)別不大
asfreq:頻率轉(zhuǎn)換
p = pd.Period("2017", "A-DEC")
print(p)
print(p.asfreq("M", how = "start")) # 也可寫 how = "s"
print(p.asfreq("D", how = "end"))   # 也可寫 how = "e"
# 通過.asfreq(freq, method = None, how = None)方法轉(zhuǎn)換成別的頻率

prng = pd.period_range("2017", "2018", freq = "M")
ts1 = pd.Series(np.random.rand(len(prng)), index = prng)
ts2 = pd.Series(np.random.rand(len(prng)), index = prng.asfreq("D", how = "start"))
print(ts1.head(), len(ts1))
print(ts2.head(), len(ts2))
# asfreq也可以轉(zhuǎn)換TIMESeries的index
時間戳與時期之間的轉(zhuǎn)換:pd.to_period()、pd.to_timestamp()
rng = pd.date_range("2017/1/1", periods = 10, freq = "M")
prng = pd.period_range("2017", "2018", freq = "M")

ts1 = pd.Series(np.random.rand(len(rng)), index = rng)
print(ts1.head())
print(ts1.to_period().head())
# 每月最后一日丹莲,轉(zhuǎn)化為每月

ts2 = pd.Series(np.random.rand(len(prng)), index = prng)
print(ts2.head())
print(ts2.to_timestamp().head())
# 每月光坝,轉(zhuǎn)化為每月第一天


【課程2.11】 時間序列 - 索引及切片

????TimeSeries是Series的一個子類尸诽,所以Series索引及數(shù)據(jù)選取方面的方法基本一樣
????同時TimeSeries通過時間序列有更便捷的方法做索引和切片

索引
from datetime import datetime

rng = pd.date_range("2017/1", "2017/3")
ts = pd.Series(np.random.rand(len(rng)), index = rng)
print(ts.head())

print(ts[0])
print(ts[:2])
print("--------")
# 基本下標(biāo)位置索引

print(ts["2017/1/2"])
print(ts["20170103"])
print(ts["1/10/2017"])
print(ts[datetime(2017,1,20)])
print("---------")
# 時間序列標(biāo)簽索引,支持各種時間字符串盯另,以及datetime.datetime

# 時間序列由于按照時間先后排序性含,故不用考慮順序問題
# 索引方法同樣適用于Dataframe
切片
rng = pd.date_range("2017/1", "2017/3", freq = "12H")
ts = pd.Series(np.random.rand(len(rng)), index = rng)

print(ts["2017/1/5": "2017/1/10"])
print("---------")
# 和Series按照index索引原理一樣,也是末端包含

print(ts["2017/2"].head())
# 傳入月土铺,直接得到一個切片
重復(fù)索引的時間序列
dates = pd.DatetimeIndex(['1/1/2015','1/2/2015','1/3/2015','1/4/2015','1/1/2015','1/2/2015'])
ts = pd.Series(np.random.rand(len(dates)), index = dates)
print(ts)
print(ts.is_unique, ts.index.is_unique)
print("-------")
# index有重復(fù)胶滋,is_unique檢查 → values唯一后德,index不唯一

print(ts["20150101"], type(ts["20150101"]))
print(ts["20150104"], type(ts["20150104"]))
print("-------")
# index有重復(fù)的將返回多個值

print(ts.groupby(level = 0).mean())
# 通過groupby做分組赫蛇,重復(fù)的值這里用平均值處理


【課程2.12】 時間序列 - 重采樣

????將時間序列從一個頻率轉(zhuǎn)換為另一個頻率的過程,且會有數(shù)據(jù)的結(jié)合
????降采樣:高頻數(shù)據(jù) → 低頻數(shù)據(jù),eg.以天為頻率的數(shù)據(jù)轉(zhuǎn)為以月為頻率的數(shù)據(jù)
????升采樣:低頻數(shù)據(jù) → 高頻數(shù)據(jù)管行,eg.以年為頻率的數(shù)據(jù)轉(zhuǎn)為以月為頻率的數(shù)據(jù)

重采樣:.resample()
創(chuàng)建一個以天為頻率的TimeSeries套菜,重采樣為按2天為頻率
rng = pd.date_range("20170101", periods = 12)
ts = pd.Series(np.arange(len(rng)), index = rng)
print(ts)
print("\n")

ts_re = ts.resample("5D")
ts_re2 = ts.resample("5D").sum()
print(ts_re, type(ts_re))
print("\n")
print(ts_re2, type(ts_re2))
print("---------")
# ts.resample("5D"):得到一個重采樣構(gòu)建器戏溺,頻率改為5天
# ts.resample("5d").sum():得到一個新的聚合后的Series,聚合方式為求和
# freq:重采樣頻率 -> ts.resample("5D")
# .sum():聚合方法

print(ts.resample('5D').mean(),'→ 求平均值\n')
print(ts.resample('5D').max(),'→ 求最大值\n')
print(ts.resample('5D').min(),'→ 求最小值\n')
print(ts.resample('5D').median(),'→ 求中值\n')
print(ts.resample('5D').first(),'→ 返回第一個值\n')
print(ts.resample('5D').last(),'→ 返回最后一個值\n')
print(ts.resample('5D').ohlc(),'→ OHLC重采樣\n')
# OHLC:金融領(lǐng)域的時間序列聚合方式 → open開盤、high最大值羡榴、low最小值、close收盤
降采樣
rng = pd.date_range("20170101", periods = 12)
ts = pd.Series(np.arange(1,13), index = rng)
print(ts)
print("-------")
print(ts.resample("5D").sum(),'→ 默認\n')
print(ts.resample('5D', closed = 'left').sum(),'→ left\n')
print(ts.resample('5D', closed = 'right').sum(),'→ right\n')
print('-----')
# closed:各時間段哪一端是閉合(即包含)的,默認 左閉右閉
# 詳解:這里values為0-11,按照5D重采樣 → [1,2,3,4,5],[6,7,8,9,10],[11,12]
# left指定間隔左邊為結(jié)束 → [1,2,3,4,5],[6,7,8,9,10],[11,12]
# right指定間隔右邊為結(jié)束 → [1],[2,3,4,5,6],[7,8,9,10,11],[12]

print(ts.resample('5D', label = 'left').sum(),'→ leftlabel\n')
print(ts.resample('5D', label = 'right').sum(),'→ rightlabel\n')
# label:聚合值的index摇予,默認為取左
# 值采樣認為默認(這里closed默認)
升采樣及插值
rng = pd.date_range('2017/1/1 0:0:0', periods = 5, freq = 'H')
ts = pd.DataFrame(np.arange(15).reshape(5,3),
                  index = rng,
                  columns = ['a','b','c'])
print(ts)

print(ts.resample('15T').asfreq())
print(ts.resample('15T').ffill())
print(ts.resample('15T').bfill())
# 低頻轉(zhuǎn)高頻,主要是如何插值
# .asfreq():不做填充,返回Nan
# .ffill():向上填充
# .bfill():向下填充
時期重采樣 - Period
prng = pd.period_range('2016','2017',freq = 'M')
ts = pd.Series(np.arange(len(prng)), index = prng)
print(ts)

print(ts.resample('3M').sum())  # 降采樣
print(ts.resample('15D').ffill())  # 升采樣
最后:

Pandas課程作業(yè)
Pandas課程作業(yè)答案
以上完整代碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末漱挚,一起剝皮案震驚了整個濱河市侣背,隨后出現(xiàn)的幾起案子憔杨,更是在濱河造成了極大的恐慌寻狂,老刑警劉巖樊拓,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鸿染,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事广辰±罡” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵问欠,是天一觀的道長度硝。 經(jīng)常有香客問我,道長兼吓,這世上最難降的妖魔是什么佑力? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任撕蔼,我火速辦了婚禮怒坯,結(jié)果婚禮上弄慰,老公的妹妹穿的比我還像新娘慌闭。我一直安慰自己,他們只是感情好豺妓,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上奄抽,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機與錄音焊虏,去河邊找鬼诵闭。 笑死,一個胖子當(dāng)著我的面吹牛澎嚣,可吹牛的內(nèi)容都是我干的疏尿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了扛伍?” 一聲冷哼從身側(cè)響起订讼,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎诬辈,沒想到半個月后颓哮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體常摧,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡磕洪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年吭练,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片析显。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡鲫咽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谷异,到底是詐尸還是另有隱情分尸,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布歹嘹,位于F島的核電站箩绍,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏尺上。R本人自食惡果不足惜伶选,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望尖昏。 院中可真熱鬧仰税,春花似錦、人聲如沸抽诉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽迹淌。三九已至河绽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間唉窃,已是汗流浹背耙饰。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留纹份,地道東北人苟跪。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像蔓涧,于是被迫代替她去往敵國和親件已。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容