pandas 经常是和其他数值计算工具一起使用,比如 Numpy 和 SciPy 以及数据可视化工具比如 matplotlib。
pandas 数据结构介绍
两个常用的工具数据结构:Series 和 DataFrame
Series
Series 是一种一维的数组型对象,它包含了一个值序列,并且包含了数据标签。
In [1]: import pandas as pd
In [2]: obj = pd.Series([4,7,-5,3])
In [3]: obj
Out[3]:
0 4
1 7
2 -5
3 3
dtype: int64
In [1]: import pandas as pd
In [2]: obj2 = pd.Series([4, 7, -5, 3], index=['d','b', 'a', 'c'])
In [3]: obj2
Out[3]:
d 4
b 7
a -5
c 3
dtype: int64
In [4]: obj2[obj2>0]
Out[4]:
d 4
b 7
c 3
dtype: int64
In [8]: obj4 = pd.Series(sdata, index = states)
In [9]: obj4
Out[9]:
California NaN
Chio 35000.0
Oregon 16000.0
Texas 71000.0
dtype: float64
In [10]: pd.isnull(obj4)
Out[10]:
California True
Chio False
Oregon False
Texas False
dtype: bool
In [11]: pd.notnull(obj4)
Out[11]:
California False
Chio True
Oregon True
Texas True
dtype: bool
DataFrame
DataFrame 表示的是矩阵的数据表,它包含已排序的列集合,每一列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame 既有行索引也有列索引,它可以被视作一个共享相同索引的Series的字典。
n [23]: data = {'a': [1, 2, 3], 'b': ['ch', 'ch', 'bh'], 'c': [100,222,333]}
In [24]: frame = pd.DataFrame(data)
In [25]: frame
Out[25]:
a b c
0 1 ch 100
1 2 ch 222
2 3 bh 333
给列按指定顺序排列
In [30]: pd.DataFrame(data, columns = ['c', 'a', 'a'])
Out[30]:
c a a
0 100 1 1
1 222 2 2
2 333 3 3
行也可以通过位置或特殊属性loc进行选取
In [31]: frame.loc[0]
Out[31]:
a 1
b ch
c 100
Name: 0, dtype: object
将列表或数组赋值给一个列时,值的长度必须和DataFrame的长度相匹配。
In [43]: frame2
Out[43]:
a b c d
0 1 ch 12 14
1 2 ch 12 14
2 3 bh 12 14
In [44]: frame2['c'] = np.arange(3)
In [45]: frame2
Out[45]:
a b c d
0 1 ch 0 14
1 2 ch 1 14
2 3 bh 2 14
In [46]: val = pd.Series([1,2], index = [0,1])
In [47]: frame2['d'] = val
In [48]: frame2
Out[48]:
a b c d
0 1 ch 0 1.0
1 2 ch 1 2.0
2 3 bh 2 NaN
In [49]: frame2['e'] = frame2.c == 1
In [50]: frame2
Out[50]:
a b c d e
0 1 ch 0 1.0 False
1 2 ch 1 2.0 True
2 3 bh 2 NaN False
In [52]: del frame2['e']
In [53]: frame2.columns
Out[53]: Index(['a', 'b', 'c', 'd'], dtype='object')
如果嵌套字典被赋值给DataFrame ,pandas 会将字典的键作为列,将内部字典的键作为行索引
In [3]: pop = {'Nevda': {2001: 2.4, 2002: 2.9}, 'Ohio': {2000: 1.5, 2001: 4.7, 2002: 3.6}}
In [4]: frame3 = pd.DataFrame(pop)
In [5]: frame3
Out[5]:
Nevda Ohio
2000 NaN 1.5
2001 2.4 4.7
2002 2.9 3.6
内部字典的键被联合,排序后形成了结果的索引。如果已经显式指明索引的话,内部字典的键将不会被排序:
In [22]: pd.DataFrame(pop, index = [2001,2002, 2003])
Out[22]:
Nevda Ohio
2001 2.4 4.7
2002 2.9 3.6
2003 NaN NaN
包含Series的字典也可以用于构造DataFrame
frame3['Nevda'][:1]
Out[9]:
2000 NaN
Name: Nevda, dtype: float64
In [13]: frame3['Nevda'][:3]
Out[13]:
2000 NaN
2001 2.4
2002 2.9
Name: Nevda, dtype: float64
In [20]: frame3['Nevda'][-2:]
Out[20]:
2001 2.4
2002 2.9
Name: Nevda, dtype: float64
DataFrame 有索引和列,index,columns
索引对象
pandas 中的索引对象是用于存储轴标签和其他元数据的(例如轴名称或标签),在构造Series或DataFrame时,所使用的任意数组或标签序列都可以在内部转换为索引对象。
索引对象是不可变的。
索引对象方法和属性
方法 | 描述 |
---|---|
append | 将额外的索引对象粘贴到原索引后,产生一个新的索引 |
difference | 两个索引差集 |
intersection | 交集 |
union | 并集 |
isin | 是否存在 |