数据分析与深度学习(一 入门基础 python3)

一. DataFrame的数据结构

通过二维数组创建

import numpy as np
import pandas as pd

# 1、DataFrame的创建方式
# 1.1 通过二维数组创建
arr = [['张伊曼', 100], ['张诗诗', 90], ['张巧玲', 80]]
df0 = pd.DataFrame(arr)
print("df0===========================")
print(df0)

通过字典创建

# 1.2 通过字典创建
dict0 = {
    'android': [90, 80, 60],
    'java': [99, 78, 89],
    'python': [98, 82, 85],
    'c': 80
}
df0 = pd.DataFrame(dict0)
print("df0===========================")
print(df0)

DataFrame的基本属性

# 2、基本属性
arr = [['张伊曼', 100], ['张诗诗', 90], ['张巧玲', 80]]
df0 = pd.DataFrame(arr)
print("df0===========================")
print(df0)

print("df0.index===========================")  #如果不指定index的值,就会从默认0开始
print(df0.index)

print("df0.columns===========================")  #如果不指定columns的值,就会从默认0开始
print(df0.columns)

print("df0.dtypes===========================")   #以列为单位算起
print(df0.dtypes)

print("df0.values===========================")
print(df0.values)

print("更换index、columns的值===========================")
df0 = pd.DataFrame(arr,index=['第一行','第二行','第三行'],columns=['name','分散'])
#df0.index = ['第一行', '第二行', '第三行']  #等同于以这种方式更改index的值
print(df0)

DataFrame的值的获取

介绍几个注意点:
1)索引对象,不管是Series还是DataFrame对象,都有索引对象,他们的自动对齐功能也是通过索引实现的
2)DataFrame可以直接通过列索引获取指定列的数据
3)如果需要获取指定行的数据的话,需要通过ix方法来获取对应行索引的行数据
4)DataFrame可以切片操作

# 3、DataFrame的值的获取
dict0 = {
    'android': [90, 80, 60],
    'java': [99, 78, 89],
    'python': [98, 82, 85],
    'c': 80
}
df0 = pd.DataFrame(dict0)
df0.index = ['张伊曼', '张诗诗', '张巧玲']
print("df0===========================")
print(df0)

# print(df0['张伊曼']['android'])  #注意:先行后列获取会报错

print("单个的值的获取===========================")
print(df0['android']['张伊曼'])    #通过这种方式获取单个的值

print("一行值的获取===========================")
print(df0.ix[0])

print("多行值的获取===========================")
print(df0.ix[:2])

print("任意多行值的获取===========================")
print(df0.ix[:2, :2])

print("一列值的获取===========================")
print(df0['android'])

修改值 新增列 新增行

注意:
1)numpy是不能加新行新列的 但是DataFrame可以
2)修改某个具体对象的值,即可以先列后行 也可以先行后列 最好是先列后行可以自动改变对象的数据类型

# 4、 修改值  新增列 新增行
dict0 = {
    'android': [90, 80, 60],
    'java': [99, 78, 89],
    'python': [98, 82, 85],
    'c': 80
}
df0 = pd.DataFrame(dict0)
df0.index = ['张伊曼', '张诗诗', '张巧玲']
print("df0===========================")
print(df0)

print("修改单个值===========================")
df0['android']['张伊曼'] = 100
print(df0)

print("修改一列值===========================")
df0['android'] = [100, 100, 100]
print(df0)

print("新增列===========================")
df0['c++'] = np.nan
print(df0)

print("新增行===========================")
df0.ix['思思'] = np.nan
print(df0)

二. 文件数据的导入导出

通过二维数组创建

import numpy as np
import pandas as pd

# 1、DataFrame的创建方式
# 1.1 通过二维数组创建
arr = [['张伊曼', 100], ['张诗诗', 90], ['张巧玲', 80]]
df0 = pd.DataFrame(arr)
print("df0===========================")
print(df0)

通过字典创建

# 1.2 通过字典创建
dict0 = {
    'android': [90, 80, 60],
    'java': [99, 78, 89],
    'python': [98, 82, 85],
    'c': 80
}
df0 = pd.DataFrame(dict0)
print("df0===========================")
print(df0)

DataFrame的基本属性

# 2、基本属性
arr = [['张伊曼', 100], ['张诗诗', 90], ['张巧玲', 80]]
df0 = pd.DataFrame(arr)
print("df0===========================")
print(df0)

print("df0.index===========================")  #如果不指定index的值,就会从默认0开始
print(df0.index)

print("df0.columns===========================")  #如果不指定columns的值,就会从默认0开始
print(df0.columns)

print("df0.dtypes===========================")   #以列为单位算起
print(df0.dtypes)

print("df0.values===========================")
print(df0.values)

print("更换index、columns的值===========================")
df0 = pd.DataFrame(arr,index=['第一行','第二行','第三行'],columns=['name','分散'])
#df0.index = ['第一行', '第二行', '第三行']  #等同于以这种方式更改index的值
print(df0)

DataFrame的值的获取

介绍几个注意点:
1)索引对象,不管是Series还是DataFrame对象,都有索引对象,他们的自动对齐功能也是通过索引实现的
2)DataFrame可以直接通过列索引获取指定列的数据
3)如果需要获取指定行的数据的话,需要通过ix方法来获取对应行索引的行数据
4)DataFrame可以切片操作

# 3、DataFrame的值的获取
dict0 = {
    'android': [90, 80, 60],
    'java': [99, 78, 89],
    'python': [98, 82, 85],
    'c': 80
}
df0 = pd.DataFrame(dict0)
df0.index = ['张伊曼', '张诗诗', '张巧玲']
print("df0===========================")
print(df0)

# print(df0['张伊曼']['android'])  #注意:先行后列获取会报错

print("单个的值的获取===========================")
print(df0['android']['张伊曼'])    #通过这种方式获取单个的值

print("一行值的获取===========================")
print(df0.ix[0])

print("多行值的获取===========================")
print(df0.ix[:2])

print("任意多行值的获取===========================")
print(df0.ix[:2, :2])

print("一列值的获取===========================")
print(df0['android'])

修改值 新增列 新增行

注意:
1)numpy是不能加新行新列的 但是DataFrame可以
2)修改某个具体对象的值,即可以先列后行 也可以先行后列 最好是先列后行可以自动改变对象的数据类型

# 4、 修改值  新增列 新增行
dict0 = {
    'android': [90, 80, 60],
    'java': [99, 78, 89],
    'python': [98, 82, 85],
    'c': 80
}
df0 = pd.DataFrame(dict0)
df0.index = ['张伊曼', '张诗诗', '张巧玲']
print("df0===========================")
print(df0)

print("修改单个值===========================")
df0['android']['张伊曼'] = 100
print(df0)

print("修改一列值===========================")
df0['android'] = [100, 100, 100]
print(df0)

print("新增列===========================")
df0['c++'] = np.nan
print(df0)

print("新增行===========================")
df0.ix['思思'] = np.nan
print(df0)

三. 常用的数据处理

DataFrame的遍历

  • 初始化
import pandas as pd
inp = [{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}]
df = pd.DataFrame(inp)
print df
  1. for row in df: 获取每个列名
  2. 通过遍历df的行for date, row in df.T.iteritems(): 或者 for row in df.iterrows():
  3. 以迭代的方式遍历for row in df.itertuples(index=True, name='Pandas')

DataFrame的数据运算

  • 实例, 暂时不详细讲解
import numpy
from pandas import DataFrame

df = DataFrame({
    "key1":['a','a','b','b','a'],
    "key2":['one','tow','one','two','one'],
    "data1":numpy.random.randn(5),
    "data2":numpy.random.randn(5)
})

df.groupby("key1")["data1","data2"].agg(lambda arr : arr.max()-arr.min())

清除重复值

from pandas import read_excel

df = read_excel("d:/1.xlsx", sheetname="sheet1")
newDf = df.drop_duplicates()

缺失值处理

from pandas import dropna,read_excel

df = read_excel("d:/1.xlsx", sheetname="sheet1")
newDf = df.dropna()

空格值处理

from pandas import read_excel

df = read_excel("d:/1.xlsx", sheetname="sheet1")
newDf = df['name'].str.strip()
df['name'] = newDf

字段抽取

from pandas import read_excel

df = read_excel("d:/1.xlsx", sheetname="sheet1")
df['tel'] = df['tel'].astype(str)
bands = df['tel'].str.slice(0, 3)
areas = df['tel'].str.slice(3, 7)
nums = df['tel'].str.slice(7, 11)

字段分割

  • split(sep, n, expand=False)
    • sep 用于分割的字符串
    • n 分割为多少列
    • expand 是否展开为数据框,
      • true 返回DataFrame
      • false 返回Series
from pandas import read_excel

df = read_excel("d:/1.xlsx", sheetname="sheet1")
newDf = df['name'].str.split(' ', 1, True)
newDf.columns = ['band', 'name']

记录抽取

  • dataframe[condition]
    • condition 过滤的条件
      • 比较运算
        • df[df.comments>1000]
      • 范围运算
        • df[df.comments.between(100, 1000)]
      • 空置匹配
        • df[pandas.isnull(df.titile)]
      • 字符匹配
        • df[df.title.str.contains('sdfs', na=False)]
      • 逻辑运算
        • df[(df.comments>=100) & (df.comments<= 1000)]
    • 返回DataFrame

随机抽样

  • numpy.random.randint(start, end, num)
    • 返回行数的索引值序列
from pandas import read_excel

df = read_excel("d:/1.xlsx", sheetname="sheet1")
r = numpy.random.randint(0, 10, 3)
df.loc[r, :]

记录合并

  • concat([dataFrame1, dataFrame2,...])
    • 返回DataFrame
from pandas import read_excel

df = read_excel("d:/1.xlsx", sheetname="sheet1")
df2 = read_excel("d:/2.xlsx", sheetname="sheet1")
concat([df, df2])

字段合并

  • X = x1 + x2 必须是字符, 数量相
from pandas import read_excel

df = read_excel("d:/1.xlsx", sheetname="sheet1")
df = df.astype(str)
tel = df['band'] + df['area'] + df['num']

字段匹配

  • merge(x, y, left_on, right_on)
    • x 第一个数据框
    • y 第二个数据框
    • left_on 第一个数据框用于匹配的列
    • right_on 第二个数据框用于匹配的列
    • 返回DataFrame
from pandas import read_excel

df = read_excel("d:/1.xlsx", sheetname="sheet1")
df1 = read_excel("d:/1.xlsx", sheetname="sheet1")
ttimeprices = pandas.merge(
    df,
    df1,
    left_on = "id",
    right_on="id"
)

数据标准化

  • 将数据按比例缩放, 使之落入特定区间, 一般我们使用0-1标准化;
    • x* = x-min / max-min
from pandas import read_excel

df = read_excel("d:/1.xlsx", sheetname="sheet1")
scale = (df.score-df.score.min()) / (df.score.max()-df.score.min())

数据分组

  • cut(series, bins, right=True, labels=NULL)
    • series 需要分组的数据
    • bins 分组的划分数组
    • right 分组的时候右边是否闭合
    • labels 分组的自定义标签, 也可以不定义
from pandas import read_excel

df = read_excel("d:/1.xlsx", sheetname="sheet1")
bins = [min(df.cost)-1, 20, 40, max(df.cost)+1]
labels = ['A', 'B', 'C']
pandas.cut(df.cost, bins)
pandas.cut(df.cost, bins, right=False)
pandas.cut(df.cost, bins, right=False, labels=labels)

日期转换

  • date = to_datetime(dateString, format)
  • 逆向有 datetime.strftime(x, format)
    • %Y 代表年份
    • %m 代表月份
    • %d 代表日期
    • %H 代表小时
    • %M 代表分钟
    • %S 代表秒
from pandas import read_excel

df = read_excel("d:/1.xlsx", sheetname="sheet1")
df_dt = pandas.to_datetime(df.注册时间, format="%Y/%m/%d")

日期抽取

  • datetime列.dt.property
    • second 1-60秒
    • minute 1-60分钟
    • hour 1-24小时
    • day 1-31 一个月中的第几天
    • month 1-12月份
    • year 年份
    • weekday 1-7一周中的第几天
from pandas import read_excel

df = read_excel("d:/1.xlsx", sheetname="sheet1")
df_dt = pandas.to_datetime(df.注册时间, format="%Y/%m/%d")
df_dt.dt.second

四. 向量化运算

from pandas import DataFrame
import numpy

r = numpy.arange(0.1, 0.5, 0.01)
r+r
r-r
r*r
r/r
# 长短不一时
r+1

# 函数式的向量化计算
numpy.power(r, 5)

# 比较计算
r > 0.3

# 矩阵计算
numpy.dot(r, r.T)

sum(r*r)

df = DataFrame({
    "data1": numpy.random.randn(5),
    "data2": numpy.random.randn(5)
})

df.apply(lambda x: min(x))

df.apply(lambda x: min(x), axis=1)

# 判断每个列是否都大于0
df.apply(lambda x: numpy.all(x>0), axis=1)
# 结合过滤
df[df.apply(lambda x: numpy.all(x>0), axis=1)]

五. 使用matplotlib作图

散点图 scatter diagram

  • plot(x, y, ".", color=(r, g, b))
    • x,y X.Y轴序列
    • ".","o" 小点还是大点
    • color 散点图的颜色, 可以用rgb定义, 也可以用英文字母
  • plt.xlabel("x轴标签")
  • plt.ylabel("y轴标签")
  • plt.grid(True)
from pandas import read_excel
import matplotlib
import matplotlib.pyplot as plt

df = read_excel("d:/1.xlsx", sheetname="sheet1")
font = {
    "family":"SimHei"
}
matplotlib.rc("font", **font)
plt.plot(data['广告费用'], data['购买用户数'], '.')
plt.xlabel('广告费用')
plt.ylabel('购买用户数')
plt.grid(True)

plt.show()

折线图

  • plot(x, y, style, color, linewidth)
    • style 画线的样式
        • 连续的曲线
      • -- 连续的虚线
      • -. 连续的带点的曲线
      • : 由点连成的曲线
      • . 小点,散点图
      • o 大点,散点图
      • , 像素点(更小的点)的散点图
        • 五角星的点,散点图
    • color 线的颜色
    • linewidth 线的宽度
  • title('图的标题')
import pandas
from pandas import read_csv
from matplotlib import pyplot as plt

data = read_csv("1.csv")
data['date'] = pandas.to_datetime(data['date'])
plt.plot(data['date'], data['购买人数'], '-', color='r', lineWidth=10)

饼图

  • pie(x, labels, colors, explode, autopct)
    • x 绘图的序列
    • labels 绘图的各部分标签
    • colors 各部分颜色
    • explode 需要突出的块状序列
    • autopct 饼图占比的显示格式, %.2f:保留2位小数
  • title('图的标题')
import pandas,numpy
from pandas import read_csv
from matplotlib import pyplot as plt

data = read_csv("1.csv")
gb = data.groupby(
    by=['通信品牌'],
    as_index=False
)['号码'].agg({
    '用户数':numpy.size
})

font = {
    "family":"SimHei"
}
matplotlib.rc("font", **font)
plt.pie(gb['用户数'], labels=gb['通信品牌'], autopct='%.2f%%')
plt.show()

柱状图

  • bar(left, height, width, color)
    • left x轴的位置序列, 一般采用arange函数产生一个序列
    • height y轴的数值序列, 也就是柱形图的高度, 一般我们展示的数据
    • width 柱形图的宽度, 一般设置为1
    • color 柱形图的颜色
  • barh(bottom, width, height, color)
import pandas,numpy
from pandas import read_csv
from matplotlib import pyplot as plt

data = read_csv("1.csv")
gb = data.groupby(
    by=['通信品牌']
)['月消费(元)'].agg({
    '月消费':numpy.sum
})

font = {
    "family":"SimHei"
}
matplotlib.rc("font", **font)

#竖向柱状图
plt.bar(index, gb['月消费'], 1, color='G')
# 标签添加
plt.xticks(index + 1/2, gb.index)
plt.show()
#横向柱状图
plt.bar(index, gb['月消费'], 1, color='G')
plt.xticks(index + 1/2, gb.index)
plt.show()

# 分组的条形图
d1 = '手机品牌'
d2 = '通信品牌'
v = '月消费'

gb = data.groupby(by=[d1, d2])['月消费(元)'].agg({v: numpy.sum})

d1size = gb.index.levels[0].size
d2size = gb.index.levels[1].size

index = numpy.arange(d1size)
colors = ['r', 'g', 'b']

for i in range(0, d2size):
    print(i)
    subgb = gb[v][gb.index.labels[1] == i]
    bar = plt.bar(index*d2size + i, subgb, color=colors[i])

lIndex = numpy.arange(d1size) * d2size
plt.xticks(lIndex + 3/2, gb.index.levels[0])

plt.legend(gb.index.levels[1])
plt.show()

直方图

  • hist(x, color, bins, cumulative=False)
    • x 需要进行绘制的向量
    • color 直方图的填充颜色
    • bins 设置直方图的分组个数
    • cumulative 设置是否累计计数, 默认False
import pandas,numpy
from pandas import read_csv
from matplotlib import pyplot as plt

data = read_csv("1.csv")

plt.hist(data['购买用户数'], bins=20, cumulative=True)

六. 数据统计

散点图 scatter diagram

  • plot(x, y, ".", color=(r, g, b))
    • x,y X.Y轴序列
    • ".","o" 小点还是大点
    • color 散点图的颜色, 可以用rgb定义, 也可以用英文字母
  • plt.xlabel("x轴标签")
  • plt.ylabel("y轴标签")
  • plt.grid(True)
from pandas import read_excel
import matplotlib
import matplotlib.pyplot as plt

df = read_excel("d:/1.xlsx", sheetname="sheet1")
font = {
    "family":"SimHei"
}
matplotlib.rc("font", **font)
plt.plot(data['广告费用'], data['购买用户数'], '.')
plt.xlabel('广告费用')
plt.ylabel('购买用户数')
plt.grid(True)

plt.show()

折线图

  • plot(x, y, style, color, linewidth)
    • style 画线的样式
        • 连续的曲线
      • -- 连续的虚线
      • -. 连续的带点的曲线
      • : 由点连成的曲线
      • . 小点,散点图
      • o 大点,散点图
      • , 像素点(更小的点)的散点图
        • 五角星的点,散点图
    • color 线的颜色
    • linewidth 线的宽度
  • title('图的标题')
import pandas
from pandas import read_csv
from matplotlib import pyplot as plt

data = read_csv("1.csv")
data['date'] = pandas.to_datetime(data['date'])
plt.plot(data['date'], data['购买人数'], '-', color='r', lineWidth=10)

饼图

  • pie(x, labels, colors, explode, autopct)
    • x 绘图的序列
    • labels 绘图的各部分标签
    • colors 各部分颜色
    • explode 需要突出的块状序列
    • autopct 饼图占比的显示格式, %.2f:保留2位小数
  • title('图的标题')
import pandas,numpy
from pandas import read_csv
from matplotlib import pyplot as plt

data = read_csv("1.csv")
gb = data.groupby(
    by=['通信品牌'],
    as_index=False
)['号码'].agg({
    '用户数':numpy.size
})

font = {
    "family":"SimHei"
}
matplotlib.rc("font", **font)
plt.pie(gb['用户数'], labels=gb['通信品牌'], autopct='%.2f%%')
plt.show()

柱状图

  • bar(left, height, width, color)
    • left x轴的位置序列, 一般采用arange函数产生一个序列
    • height y轴的数值序列, 也就是柱形图的高度, 一般我们展示的数据
    • width 柱形图的宽度, 一般设置为1
    • color 柱形图的颜色
  • barh(bottom, width, height, color)
import pandas,numpy
from pandas import read_csv
from matplotlib import pyplot as plt

data = read_csv("1.csv")
gb = data.groupby(
    by=['通信品牌']
)['月消费(元)'].agg({
    '月消费':numpy.sum
})

font = {
    "family":"SimHei"
}
matplotlib.rc("font", **font)

#竖向柱状图
plt.bar(index, gb['月消费'], 1, color='G')
# 标签添加
plt.xticks(index + 1/2, gb.index)
plt.show()
#横向柱状图
plt.bar(index, gb['月消费'], 1, color='G')
plt.xticks(index + 1/2, gb.index)
plt.show()

# 分组的条形图
d1 = '手机品牌'
d2 = '通信品牌'
v = '月消费'

gb = data.groupby(by=[d1, d2])['月消费(元)'].agg({v: numpy.sum})

d1size = gb.index.levels[0].size
d2size = gb.index.levels[1].size

index = numpy.arange(d1size)
colors = ['r', 'g', 'b']

for i in range(0, d2size):
    print(i)
    subgb = gb[v][gb.index.labels[1] == i]
    bar = plt.bar(index*d2size + i, subgb, color=colors[i])

lIndex = numpy.arange(d1size) * d2size
plt.xticks(lIndex + 3/2, gb.index.levels[0])

plt.legend(gb.index.levels[1])
plt.show()

直方图

  • hist(x, color, bins, cumulative=False)
    • x 需要进行绘制的向量
    • color 直方图的填充颜色
    • bins 设置直方图的分组个数
    • cumulative 设置是否累计计数, 默认False
import pandas,numpy
from pandas import read_csv
from matplotlib import pyplot as plt

data = read_csv("1.csv")

plt.hist(data['购买用户数'], bins=20, cumulative=True)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容