Pandas

Series

  • 定义
    一列索引,一列数据,一共两列。
    如果使用字典创建,每一行数据对应字典的一个键值对。
    如果使用列表创建,列表内容作为数据,索引从0开始自动生成。
    series的列名固定是0,name属性表示整个Series的名字。
  • 转datafriame
    a) 保留索引
import pandas

series = pandas.Series(
{'语文': 90,
 '数学': 92,
 '物理': 100,
 '化学': 88})

df = pandas.Dataframe(series)

    b) 索引和数据变为dataframe的两列数据

df = series.reset_index()
  • 修改数据类型
# 方法一
series = series.astype(float)

# 方法二
series = series.map(float)
  • 追加数据
# 方法一
series = series.append(
pandas.Series({'政治': 80, '生物': 90}))

# 方法二
series = pandas.concat(
[series, 
 pandas.Series({'政治': 80, '生物': 90})])

# 方法三
series['政治'] = 80
series['生物'] = 90

Dataframe

  • 定义
    一列索引,任意列数据。
    每一列数据对应字典的一个键值对。
df = pandas.Dataframe(
{'姓名': ['小明', '小刚', '小赵', '小强'],
 '性别': ['男', '女', '男', '女'],
 '年龄': [18, 17, 15, 16]
})
  • 追加数据
# axis = 1表示将两个df水平拼接,默认为竖直拼接
df = pandas.concat([df1, df2], axis = 1)

# 上下限guard
df['age'] = df['age'].clip(0, 100)
  • 切片
# 取前5行
df.head(5)

# 取后5行
df.tail(5)

# 采样10行
df.sample(10)
 
  • 统计信息
# 基本信息
df.info()

# 统计信息
df.describe()

# 各个值的个数
df.value_counts()

# 是否包含空值
df.isnull().sum()

# 将空格替换为中位数
median = df['age'][df['age'] != ' '].median()
df.loc[df['age'] == ' ', 'age'] = median

# 最大和最小5个数
df['age'].nlargest(5)
df['age'].nsmallest(5)

# 累加
df['age'].cumsum()
  • 与csv的相互转换
# 从csv读取, 默认csv中全是数据
df = pandas.read_csv('data.csv')
# 从csv读取,让csv中第一列变成dateframe的index
df = pandas.read_csv('data.csv', index_col=0)

# 如果想把索引列再变成数据
df.reset_index(inplace=True)

# 读取指定列
df = pandas.read_csv('data.csv', usecols=['time', 'age'])

# 读取指定类型
df = pandas.read_csv('data.csv', datatype={'id': str})

# 替换True,False
df = pandas.read_csv('data.csv', true_values=['对'], false_values=['错'])

# 替换成NaN
df = pandas.read_csv('data.csv', na_values=['不', '否'])

# 指定日期的解析格式
from datetime import datetime
pandas.read_csv('data.csv',
sep="\t",
parse_dates=["date"],
date_parser=lambda x: datetime.strptime(x, "%Y年%m月%d日"))

# 写入csv
df.head(50).to_csv('new_data.csv')
  • 修改
# 修改列名
df.columns = [’name', 'gender', 'age']

# 修改列的数据格式
df['date'] = df['date'].astype(float)
df['date'] = pandas.to_datetime(df['date'])
df['year'] = df['date'].dt.year

# 改变列的映射
df['age'] = df['age'].map({'男':1, '女':0})

# 改变列的顺序
df = df[['D', 'C', 'B', 'A']]

# 删除列
df.drop(columns=['age', 'gender'], inplace=True)

# 删除包含NaN的行
df.dropna()

# 填充NaN为0
df.fillna(0)

# 重置索引列
df.reset_index(reset=True)

  • 创建日期index
# 创建31个日期格式的index,从'2022-10-9'开始,每个间隔一天
date_range = pandas.date_range(start='2022-10-9', periods=31)

# 创建2022年的所有周一的日期格式的index
date_range = pandas.date_range(start='2022-01-01',
end='2022-12-31',
freq='W-Mon'
  )

# 创建2022-10-1中24小时的日期形式的index
date_range = pandas.date_range(start='2022-10-1',
end='2022-10-2',
freq='H',
# closed默认左右都闭,left为左闭右开
closed=left
)

# 判断日期是一年中的哪一天
df['day_of_year'] = df['day'].dt.dayofyear

freq参数:


pandas freq参数
  • 统计函数
df.count()          #非空元素计算
df.min()            #最小值
df['age'].argmin    #第一个最小值的index
df.max()            #最大值
df.isnull()         #是否为空
df.corr()           #相关矩阵
df.idxmin()         #最小值的位置,类似于R中的which.min函数
df.idxmax()         #最大值的位置,类似于R中的which.max函数
df.quantile(0.1)    #10%分位数
df.sum()            #求和
df.mean()           #均值
df.median()         #中位数
df.mode()           #众数
df.var()            #方差
df.std()            #标准差
df.mad()            #平均绝对偏差
df.skew()           #偏度
df.kurt()           #峰度
df.describe()       #一次性输出多个描述性统计指标
df.abs()            #求绝对值
df.prod             #元素乘积
df.cumsum           #累计和
df.cumprod          #累计乘积

# 求每年的收盘均值
df.groupby('year')['close'].mean()
  • 条件筛选
# 筛选年龄在30以下,性别为女的姓名
df.loc[(df['age'] < 30) & (df['gender'] == 0), 'name']
# 将筛选结果新建一列
df['target'] = (df['age'] < 30) & (df['gender'] == 0)
df['target'] = df['target'].map(lambda x: 1 if x else -1)
  • numpy统计函数
import numpy

# 正态分布, 中心值为0,方差为1
numpy.random.normal(loc=0, scale=1, size=1000)

# 二项分布,样本数为1,概率为0.2
numpy.random.binomial(n=1, p=0.2, size=1000)

# 均匀分布,上限为1,下限为0
numpy.random.uniform(low=0, high=1, size=1000)

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

推荐阅读更多精彩内容

  • pandas Pandas是线上服务类型,数据分析和数据处理(在机器学习中数据处理) 数据分析三剑客: numpy...
    Galaxy_saturn阅读 756评论 0 1
  • 2、DataFrame DataFrame是一个【表格型】的数据结构,可以看做是【由Series组成的字典】(多个...
    仙灵儿阅读 714评论 0 1
  • 数据的分组运算和聚合 在将数据集加载、融合、准备好之后,通常就是计算分组统计或⽣成透视表, pandas提供了⼀个...
    222AblackA阅读 242评论 0 1
  • pandas统计分析 pandas主要包括两个数据结构,即Series对象和DataFrame对象,本章主要介绍如...
    爱读书的无业游民阅读 739评论 0 1
  •   说起pandas这个是python数据清洗的利器,它可以让你像sql一样操作数据,同时可以对数据进行各种计算,...
    不分享的知识毫无意义阅读 15,368评论 1 15