pandas数据规整
dataframe转array数组
df.values # 直接将dataframe转换为array数组
pd.DataFrame(arr) # 直接将数组转为DataFrame,还可以有index和columns参数,表示行索引和列索引
pandas中需要注意的细节
Series中有不同的数据类型,结果类型都是object,object就是字符串的意思
查询非空元素的个数s.count()
series的索引底层是数组
使用rename方法修改单个索引,不改变原来的索引,rename里放的是字典
切片查询a.loc[2:4, 'heigh':'address'] # 自定义索引,切片范围包含起始值和结束值(特例)
e.drop('name', inplace=True),inplace=True真删除
unstack默认操作的是最内层(stack也是如此)
整体查询
S.dtype:Series的整体数据类型
S.shape: Series的形状(每个维度的值个数,用元组表示)
len(S): Series里的元素个数,部分同上
S.count(): Series里 非空 的元素个数
S.value_counts(): 统计Series里 非空 元素值的出现次数,并自动降序排序
S.unique(): Series里 不重复 的元素(去重)
DataFrame创建
列表创建
ndarray数组创建
字典创建
字典内嵌套列表:要求内部列表等长
字典内嵌套字典:内部字典不需要等长
字典内嵌套Series:等同嵌套字典
属性查询
常用属性
a.shape # 表格形状,行数 列数
a.dtypes # 列数据类型
a.index # 行索引
a.columns # 列索引
a.values # 对象值,二维ndarray数组
整体数据情况
a.info() 整体信息,查看:数据是否异常
有没有缺失值
列数据类型是否正确
a.describe() 整体统计指标
a.head() 前5行
a.tail() 后5行
索引和切片查询,两种查询方式:
a.loc[行,列],标签索引,自定义索引
a.iloc[行,列],位置索引,默认索引
针对单元格查询的特殊写法,效率更高
a.at[2, 'address'] # 自定义索引
功能函数
isin函数:判断某列是否存在某值,写法简洁
a.where(b > 60, c):当判断条件为True,返回原值a;当判断条件为False,返回自定义的c
.idxmin() .idxmax() 计算数据第一个最大值/最小值所在位置的索引
进阶:CSV写入和读取的常见参数设置
写入csv默认utf-8格式;保存其他格式可以自行设置参数 encoding;注意:Excel打开utf-8的csv文件,中文会乱码,建议保存为GBK
a.to_csv中index=False # 不保存行索引 # header=False, #不保存列索引,不推荐;columns=['name', 'address', 'grade']# 只保存指定列
Series命名的用处
Series的name会变成DataFrame的列索引
Series的索引name会变成DataFrame的行索引name
自定义运算
apply():Series和DataFrame通用自定义运算函数(计算行/列)
map():Series用
applymap():DataFrame用(计算单元格)
分组聚合
groupby分组中最常用的函数:mean()、size()
行转列:unstack将series层次化索引顺时针旋转为列索引(从最内层开始转)
对层次化索引的Series,可以用unstack将其重排为一个DataFrame
data.unstack() # 列索引转行索引,然后整个表格躺倒
unstack默认操作的是最内层(stack也是如此),可以指定具体操作哪一层,df.unstack() # 最里边的行索引 ,转为列索引仍然是最里边;stack也是一样;旋转之后都是放在最里面
常用的crosstab交叉表函数结构(2列数据的频度情况)
# 常见参数:行索引,列索引,分项小计
pd.crosstab(tips.time, [tips.smoker, tips.day], margins=True)
常用的Pivot_table 透视表函数结构
# 常见参数:需要计算的列,行索引,列索引,分项小计(默认False),自定义计算函数(默认是mean),缺失值填充
tips.pivot_table(['tip_pct', 'size'], index=['time', 'day'], columns='smoker', margins=True, aggfunc=len, fill_value=0)
# 交叉表只要把 aggfunc参数值改为 len 即可
底层:使用分组聚合和轴向旋转实现透视表
# 分组:行索引,列索引;均值聚合;行索引转列索引;填充缺失值为0
tips.groupby(['time', 'day', 'smoker'])['size', 'tip_pct'].mean().unstack().fillna(0)
# 交叉表只要把聚合函数由.mean()改为.size()即可