Pandas 是python的一个数据分析包。 Pandas的名称来自于面板数据(panel data)和python数据分析(data analysis)。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。Pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
数据结构
在Pandas中有两类非常重要的数据结构,即序列Series和数据框DataFrame:
Series类似于numpy中的一维数组,除了通吃一维数组可用的函数或方法,而且其可通过索引标签的方式获取数据,还具有索引的自动对齐功能;
DataFrame类似于numpy中的二维数组,同样可以通用numpy数组的函数和方法,而且还具有其他灵活应用。
例行地导入:
import pandas as pd
from pandas import Series, DataFrame
序列(Series)
series是一个像数组一样的一维序列,并伴有一个数组表示下标,叫做index。 还可以把它看作一个长度固定,有顺序的dict,从index映射到value。在很多场景下,可以当做dict来用。
创建序列
使用pd.Series函数
- 用列表
obj = pd.Series([4,7,-5,3]) #不指定下标
obj
0 4
1 7
2 -5
3 3
dtype: int64
- 指定下标
obj2 = pd.Series([4, 7, -5, 3], index=['d','b','a','c']) #指定下标
obj2
d 4
b 7
a -5
c 3
dtype: int64
- 用字典
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon':16000, 'Utah': 5000}
obj3 = pd.Series(sdata)
obj3
Ohio 35000
Texas 71000
Oregon 16000
Utah 5000
dtype: int64
索引
Series的左边为index,右边为对应的value
obj.values
array([ 4, 7, -5, 3], dtype=int64)
obj2.index
Index(['d', 'b', 'a', 'c'], dtype='object')
在序列中,index可以被视作索引; 即可以通过 obj2[‘d’] 的方法调用value,也可以类似numpy中用布尔值作索引,如 obj2[obj2>0] 但是注意index object是不可更改的
缺失数据、数据合并
isnull()和notnull()可以判断数据是否缺失:
obj.isnull()
pd.isnull(obj)
#两种使用方式
将两个序列用+连接可得到其合并的结果:
states = ['California', 'Ohio', 'Oregon', 'Texas']
obj4 = pd.Series(sdata, index=states)
obj3+obj4
California NaN
Ohio 70000.0
Oregon 32000.0
Texas 142000.0
Utah NaN
dtype: float64
name属性
serice自身和它的index都有一个叫name的属性,这个能和其他pandas的函数进行整合
obj4.name = 'population'
obj4.index.name = 'state'
obj4
state
California NaN
Ohio 35000.0
Oregon 16000.0
Texas 71000.0
Name: population, dtype: float64
数据框(DataFrame)
DataFrame表示一个长方形表格,并包含排好序的列,每一列都可以是不同的数值类型(数字,字符串,布尔值)。 DataFrame有行索引和列索引(row index, column index);可以看做是分享所有索引的由series组成的字典。数据是保存在一维以上的区块里的。
创建数据框
创建dataframe以字典为对象,字典内的值需为列表:
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
'year': [2000, 2001, 2002, 2001, 2002, 2003],
'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame = pd.DataFrame(data)
frame
state year pop
0 Ohio 2000 1.5
1 Ohio 2001 1.7
2 Ohio 2002 3.6
3 Nevada 2001 2.4
4 Nevada 2002 2.9
5 Nevada 2003 3.2
使用pd.DataFrame函数时可以指定列名和index的顺序,但是如果导入一个不存在的列名,那么会显示为缺失数据:如:
frame2 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'],
index=['one', 'two', 'three', 'four', 'five', 'six'])
frame2
year state pop debt
one 2000 Ohio 1.5 NaN
two 2001 Ohio 1.7 NaN
three 2002 Ohio 3.6 NaN
four 2001 Nevada 2.4 NaN
five 2002 Nevada 2.9 NaN
six 2003 Nevada 3.2 NaN
元素为字典的字典
对于这类字典:pandas会把外层dcit的key当做列,内层key当做行索引
pop = {'Nevada': {2001: 2.4, 2002: 2.9},
'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}
行列操作
从DataFrame里提取一列的话会返回series格式,如frame[‘state’]。frame[column]能应对任何列名,但frame.column的情况下,列名必须是有效的python变量名才行。 ** 从DataFrame里提取一行**要使用 frame2.loc[‘three’]。
对行或列可以赋值,如果赋值为单个数字则是给所有列(行)赋同一个值;如果是list或array,长度必须符合数据框的长度
创建新列
直接添加一个新的列名(‘eastern’):
frame2['eastern'] = frame2.state == 'Ohio' #动态增加列
删除列
del frame2['eastern']
转置
frame2.T
|