mysql交叉表查询列转行_数据分析工具之pandas笔记

这篇博客主要介绍了如何使用Pandas进行数据规整,包括DataFrame与array之间的转换,Series的细节处理,如查询非空元素个数、索引操作。此外,还详细讲解了DataFrame的创建、属性查询、数据统计、索引切片、自定义运算、分组聚合以及行列转换,如unstack和pivot_table的使用,特别强调了交叉表和透视表在数据分析中的应用。
摘要由CSDN通过智能技术生成

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()即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值