Pandas的数据结构
前言
基本上, Pandas的Series沿袭了Numpy的设计, 是一维数组和数组的索引, 和Numpy不同的一点是这个一维数组可以是异构的,比如数字int和字符串混在一起, 这个时候数组的类型是object. 而DataFrame是为了处理表格和异构多维的数据.
Series
可以用python的list初始化一个Series, 也可以用python的Dict初始化一个Series. 如果使用Dict那么序列的索引就是Dict的Key.
1 | d = {'d': 1, 'e':2, 'a':0} |
想要得到自己想要的顺序可以使用参数index排序Series, 下图的例子可以看到索引b, 但是它没有值会用NaN表示(可以使用isnull, notnull检测是否为空), 没有索引的值会被省略.
1 | pd.Series(d, index=['e','b','d']) |
Pandas筛选比较强大的一点是直接可以在[]输入条件, 这点可能和python本身的语法有一点不同.
1 | obj2= pd.Series(d) |
两个Series是可以直接通过索引直接做计算的, 类似数据库的join. 计算子必须都需要有相同的索引才会有计算结果, 否则会出现NaN.
1 | In [35]: obj3 |
可以给Series起一个名字, 使用Series.name属性, 取个名字的好处是如果把Series放入Dataframe, 那么这个name就是Dataframe的列名.(DataFrame也会有index名称和column名称)
1 | In [1]: s = pd.Series(["A","B","C"], name="foo") |
DataFrame
Pandas的DataFrame代表了一组表格(一般是二维, 可以使用hierarchical indexing来表示更高的维度数组), 数据的底层存储如下图所示, 数据会按类型分成不同的块存储实际的数据. 可以看到数据被没有指向具体的列, 而是通过BlockManager这个类是来管理实际数据到列名的映射.
有很多种方式构建DataFrame, 常见的一种是通过Dict; 如果想在创建的时候指定索引, 可以使用嵌入式dict.
1 | In [44]: data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'], |
下图是所有的输入数据类型可以构建DataFrame:
DataFrame可以指定column参数选择只要某几列, 也可以在column任意添加列名, 如何column这个字段赋予了不存在的列, 那么新加的这个列会显示NaN. 两者的区别在于使用属性访问时, 这个python的attribute必须符合python的规则.
1 | pd.DataFrame(data, columns=['pop','jik']) |
想要取得DataFrame的某个列, 可以采用.columnName或切片的方式:
1 | In [51]: frame2['state'] |
通过DataFrame.loc[]可以选取某几行, 这个loc用的是[] ,而不是(), 和python的语法又有些区别. 一般使用loc[]定位字符串(label)索引, iloc[]定位数字(number)索引.
1 | frame.iloc[3] |
可以使用Series给DataFrame赋值, Series将成为DataFrame的一个列, 列值必须和DataFrame的长度一致, 缺失的值将会NaN.
1 | val = pd.Series([-1.2, -1.5, -1.9], index=['two','four','five']) |
DateFrame列赋值还有一个快捷判断的语法, 可以一行代码先判断再赋值
1 | frame2['new_col'] = frame2.state == 'Ohio' |
列的删除: 使用del df[clo]DataFrame的values属性会返回一个二维ndarray的数组.
1 | frame3.values |
Index对象
Index对象负责存储轴标签axis label和其它元信息如索引名称, 任何数组或其它序列的标签在转化成Series或DataFrame的时候会被转成Index.
1 | lables = pd.Index(np.arange(3)) |
pandas的索引对象是不可变的, 既可以把index当成数组, 可以当成集合, 注意这个集合不同于python的set, 集合是可以重复的.
1 | dup_index = pd.Index(['foo','foo','bar']) |
Index对象的一些常用方法:
- Title: Pandas的数据结构
- Author: Kopei
- Created at : 2018-09-16 00:00:00
- Updated at : 2025-08-13 18:15:58
- Link: https://kopei.github.io/2018/09/15/python-2018-09-16-pandas的数据结构/
- License: This work is licensed under CC BY-NC-SA 4.0.