01
系列回顾
玩转Pandas系列已经连续推送3篇,尽量贴近Pandas的本质原理,结合工作实践,按照使用Pandas的逻辑步骤,系统地并结合实例推送Pandas的主要常用功能,已经推送的3篇。
以上3篇总结了Pandas主要的两个数据结构:Series(一维)和DataFrame(二维),系统地介绍了创建,索引,增删改查Series, DataFrame等常用操作接口,总结了Series如何装载到DataFrame中,以及一个实际应用多个DataFrame的实战项目例子。
值得推荐的是,Pandas广泛应用在金融,统计,社会科学,和许多工程领域。Pandas和R语言直接无缝衔接。Pandas是基于Numpy(Numpy基于Python)基础开发,因此能和带有第三方库的科学计算环境很好地进行集成。
02
Pandas核心应用场景
按照使用逻辑,盘点Pandas的主要可以做的事情:
能将Python, Numpy的数据结构灵活地转换为Pandas的DataFrame结构DataFrame可以方便地实现增加和删除行、列智能地带标签的切片,好玩的索引提取大数据集的子集自动数据对齐,完全可以不考虑行、列标签,直接append list.灵活地对数据集Reshape和按照不同轴变化数据的Pivot操作。强大的I/O操作。提供接口: CSV and delimited, Excel files, databases, and saving / loading data from the ultrafast HDF5 format通俗易懂地在DataFrame结构上实现merge和join操作(merge操作)善于处理missing data,如NaN, non-floating数据。强大而灵活的分组功能,在数据集上实现分-应用-合的操作,达到整合和改变数据形状的目的。时间序列的处理功能,生成 data range,移动的时间窗,时间移动和lagging等。接下来,按照以上未涉及的思路陆续推送,欢迎补充和指正。
03
多Index层级结构
Pandas中什么是有层次的数据呢? 简单来说,就是构造了一个有层次的Index实例,其他没什么不同。首先构造一个有层次的Index,如下:
#创建有层次的Index实例
index_name =['first','second']
lay_index = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],
['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
tuples = list(zip(*lay_index))
two_layers_index = pd.MultiIndex.from_tuples(tuples, names=index_name)
two_layers_index
有了Index实例,充填一个8行2列的数据values就行,如下所示:
res = np.array([list(np.random.randn(8)),list(np.random.randn(8))]).T # 8行2列
pd_h = pd.DataFrame(res, index=two_layers_index, columns = ['A','B'])
pd_h
得到数据如下,A, B 是列标签,first, second是Index实例的标签名称。
这块功能在实际使用中,暂时不常用,先不展开总结。
04
转化操作
拿到一个数据表后,有时需要改变数据表的形状,此时就要用到这块功能: reshaping, pivot, transpose, sort等功能。
4.1 pivot
pivot是指按照指定的Index和columns,values旋转原来的数据表。
#pivot
df = pd.DataFrame({ 'foo': ['one','one','one','two','two','two'],
'bar': ['A', 'B', 'C', 'A', 'B', 'C'],
'baz': [1, 2, 3, 4, 5, 6]})
df
数据显示如下,可以看到数据的index是默认的从0开始的整数索引,columns是[bar,baz,foo],
ok,现在我想作如下转化,index设置为foo, columns设置为bar, values设置为baz列,
df.pivot(index='foo', columns='bar',values='baz')
转化后的结果如下显示:
此时这种转化,用肉眼观察,是比较合理的,但是有时候为了观察多个维度,我们可能需要大量的转化实验,比如,这样设置行、列、值
df.pivot(index='bar', columns='baz', values='foo')
得到的结果如下,看出这种转化出现比较多的None值,因为这种数据轴的设置导致的,但这是正常操作。
4.2 sort
Pandas的排序操作提供了2个主要的API,分别按照值排序和索引排序。值排序的接口:
DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last')
例子总结里面所有可能的排序细节问题,首先构造一个DataFrame实例,如下所示:
df = pd.DataFrame({'col1' : ['A', 'A', 'B', np.nan, 'D', 'C'], 'col2' : [2, 1, 9, 7, 7, 4], 'col3': [0, 1,np.nan,np.nan, 2, 3]})
df
按照col1和col3这两列的值排序结果如下:
sort_1_3 = df.sort_values(by=['col1', 'col3'])
sort_1_3
排序后的结果如下所示:
以上总结了DataFrame主要能做的事情,初步了解多层 Index是怎么回事,以及Pivot,Sort等操作接口。欢迎指正。