文章图片
最近工作中,有时会遇到数据转化的问题,这块知识之前掌握得比较零散,今天花时间整理了下数据来源于下
jizhang/pandas-tidy-data?github.com
文章图片
一.层级索引 层级索引可以作为增加维度的方法,也是行列转换的关键,Pandas原有的数据类型包括Series,DataFrame
Series可以看成是一维数组+索引
DataFrame可以看成是多个Series组成的二维数组
那么如果用实现比二维更高的数据,就可以使用层次索引
例如,如果我们想用Series实现二维数据,可以增加一层索引
In
如果将元组作为键的字典传递给 Pandas,Pandas 也会默认转换为 MultiIndex,这也是创建层级索引的方式之一。
我们来看下index的两个重要属性:levels和names
以上述层级索引为例:
data
可以看出levels属性包含各等级索引的索引值,是个二维列表。例如其中['California', 'New York', 'Texas']就是一级索引levels[0]。
data.index.names#FrozenList([None, None])
names属性包含每级索引的名字,上述为None,是因为还没命名。
可以通过rename方法为index命名
data.index.rename("city",level = 0,inplace = True)
data.index.rename("dt",level = 1,inplace = True)data.index.names#输出FrozenList(['city', 'dt'])
二.行列转换(长宽互换) (1) stack和unstack
California
以上述数据为例
new_df
文章图片
unstack() 方法可以快速将一个多级索引的 Series 转化为普通索引的 DataFrame,stack则可以实现将列转化为索引。
来看个实际的行列互换的例子
列转行
import
文章图片
df
文章图片
上述转化,可以看作是宽表转长表,很好记忆,将一组具有相同特征的列,转化成一列,自然就变窄了,同时为了一一对应,需要和其他列做组合,就会变长。
行转列我们现在将以上数据进行反转操作。
df = df.set_index(["religion", "income"])["frequency"] #设置层级索引
df = df.untack() #索引转列
三.melt和pivot_table 这里放两张图,原图来自Medium(高质量的英文网站)
pivot_table透视表操作就是长表转宽表
melt操作可以看作则是宽表转长表
https://towardsdatascience.com/reshape-pandas-dataframe-with-pivot-table-in-python-tutorial-and-visualization-2248c2012a31?towardsdatascience.com
文章图片
【dataframe两个表合并|dataframe两个表合并_Pandas数据变换-长宽表互换】
文章图片
推荐阅读
- pandas|pandas dataframe pivot_table
- pandas|pandas 如何筛选某一行包含字符串_Pandas过滤dataframe中包含特定字符串的数据方法...
- 数据统计与分析|Python使用pandas把字符串转换为日期时间数据
- 数据分析|Pandas库函数总结
- python|在pandas / python中的数据框中合并两列文本
- pandas|pandas 对日期类型数据的处理
- 大数据可视化|Python疫情数据可视化分析+数据预测(pandas+pyecharts+statsmodels+matplotlib+sql)
- python数据分析|numpy+pandas
- 数据分析与挖掘|Pandas学习——分类数据