pandas 是python处理数据的很重要的一个库, pandas名字来源于panel data, 一个计量经济学中多维结构化数据库的概念(不是大熊猫的意思T—T)。所以 pandas 的重点就在于 结构化数据。 他与numpy (处理数组数据)的区别就是 每个数据多了个标签(index), 专门处理表格数据。pandas有两大数据结构 Series和 DataFrame。 本文主要是关于Series的基本用法。。
In [1]: import pandas as pd
Series:一维数组数据, 每个数据单元有个标签index
In [2]: from pandas import Series
In [3]: obj = pd.Series([3, 2, -4, 9, 3])
In [4]: obj
Out[4]:
0 3
1 2
2 -4
3 9
4 3
dtype: int64
左边显示index,右边显示数组。
可以通过.array和.index 获取numpy数组和index标签。
In [5]: obj.array
Out[5]:
[3, 2, -4, 9, 3]
Length: 5, dtype: int64
In [6]: obj.index
Out[6]: RangeIndex(start=0, stop=5, step=1)
也可以创建自定义标签的序列:
In [7]: obj2 = pd.Series([3, 2, -4, 9, 3], index=['a', 'b', 'e', 'ff', 'g'])
In [8]: obj2
Out[8]:
a 3
b 2
e -4
ff 9
g 3
dtype: int64
可以通过标签来获取数据, 这是numpy不能的
In [9]: obj2['a']
Out[9]: 3
In [11]: obj2[['b', 'e']] #注意 ['b', 'e'] 是个存有标签的列表
Out[11]:
b 2
e -4
dtype: int64
对pandas结构数据进行运算 标签不会变
In [12]: obj2[obj2>0]
Out[12]:
a 3
b 2
ff 9
g 3
dtype: int64
In [13]: obj2 / 2
Out[13]:
a 1.5
b 1.0
e -2.0
ff 4.5
g 1.5
dtype: float64
Series 也可以看作是 标签index 到 数据单元的 映射(mapping), 所以可以把字典转换成 Series
In [14]: data = {'class1': 100, 'class2': 300, 'class3': 200, 'class4': 50}
In [15]: obj3 = pd.Series(data)
In [16]: obj3
Out[16]:
class1 100
class2 300
class3 200
class4 50
dtype: int64
可以按指定字典的key来组建Series
In [17]: keys = ['class5', 'class4', 'class3', 'class2']
In [18]: obj4 = pd.Series(data, index=keys)
In [19]: obj4
Out[19]:
class5 NaN
class4 50.0
class3 200.0
class2 300.0
dtype: float64
class5 在上面字典中 没有定义, 所以会用NaN(not a number)来代替。现实中数据会有很多NaN数据,所以数据预处理很重要~
可以用.isna 来检测是由有数据缺失:
In [20]: pd.isna(obj4)
Out[20]:
class5 True
class4 False
class3 False
class2 False
dtype: bool
Series一个很重要的特征是: 他可以根据index来做对应运算(data alignment)
In [21]: obj3
Out[21]:
class1 100
class2 300
class3 200
class4 50
dtype: int64
In [22]: obj4
Out[22]:
class5 NaN
class4 50.0
class3 200.0
class2 300.0
dtype: float64
In [23]: obj3 + obj4
Out[23]:
class1 NaN
class2 600.0
class3 400.0
class4 100.0
class5 NaN
dtype: float64
可以给这个Series 类 和他的标签 起个名字
In [24]: obj4.name = 'dataset'
In [25]: obj4.index.name= 'class'
In [26]: obj4
Out[26]:
class
class5 NaN
class4 50.0
class3 200.0
class2 300.0
Name: dataset, dtype: float64
参考自: Python for Data Analysis, 2nd Edition by Wes McKinney
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)