Pandas的数据格式介绍
Series
- Series是一种类似于一维数组的对象。
它由一组数据以及一组与之相关的数据标签组成。
obj = pd.Series([4,7,-5,3])
obj.index 索引
obj.values 值
- 更改Series的索引值,初始化为0到N-1的整数型索引。
obj2 = pd.Series([4,7,-5,3],index = ['d','b','a','j'])
- 通过索引方式选取Series中的单个或一组值。
obj2['d']
obj2['a']
obj2[['a','d']]
通过布尔值的方式选取Series中的值。
选取正值
obj2[obj2 > 0]
判断某个值是否在Series的索引中 'a' in obj2
- 通过字典创建一个Series,结果Series中的索引就是原字典的键。
state = {'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}
obj3 = pd.Series(state)
obj3.index
obj3.values
如果设置的索引列表与sdata的键不一致,找不到索引的结果会显示NaN。
obj4 = pd.Series(state,index = ['California','Ohio','Oregon','Texas'])
obj4
NaN是pandas中的缺失或NA值,可以用isnull
和notnull
函数用于检测缺失数据。
- Series在算数运算会自动对齐不同索引的数据,两个Series相加两者非公有的index的值为NaN。
obj3 + obj4
Out[9]:
California NaN
Ohio 70000.0
Oregon 32000.0
Texas 142000.0
Utah NaN
dtype: float64
- Series对象本身以其索引都有一个name属性。
obj4.name = 'population'
obj4.index.name = 'state'
DataFrame
7. DataFrame是一个表格型的数据结构,它含有一组有序的列。DataFrame既有行索引也有列索引。
引入一个字典来创建一个DataFrame。
data = {'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],
'year' : [2000,2001,2002,2001,2002],
'pop':[1.5,1.7,3.6,2.4,2.9]
}
frame = pd.DataFrame(data)
frame.columns
frame.index
可以通过columns
参数来调整列的顺序和位置。
pd.DataFrame(data,columns=['year','state','pop'])
可以通过index
参数来修改行索引。如果传入的列在data找不到,会初始化NaN列。
frame2 = pd.DataFrame(data,columns=['year','state','pop','debt'],index = ['one','two','three','four','five'])
8. DataFrame列索引
frame2.year
frame2['year']
行索引用loc
frame2.loc['one']
- 创建新列
frame.debt = 16.5 标量
frame.debt = np.arange(5) 一组值
frame.debt = [np.nan,1,3,np.nan,6]
frame['eastern'] = frame.state == "Ohio"
删除列
del frame['eastern']
- 转置
frame.T
- DataFrame的行列索引都有name属性.
frame.index.name = 'year'
frame.columns.name = 'state'
索引对象
Index对象是不可修改。
方法 | 属性 |
---|---|
append | 连接另一个index对象 |
diff | 计算差值 |
intersection | 计算交集 |
union | 计算并集 |
isin | 计算一个指示各值是否到包含在参数集合中 |
delete | 删除索引i处的元素 |
drop | 删除传入值 |
insert | 将元素插入到索引i处 |
unique | 计算index中唯一值 |
is_unique | 当index没有重复值时,返回True |
基本功能
重新索引reindex
reindex可以对行索引(默认)和列索引进行重新索引。
reindex(index = [ ],columns = [ ],fill_value,method,limit)
index:用作行索引的新序列
columns:用作列索引的新序列
fill_value:需要引入缺失值时使用的替代值
method:插值填充方式,ffill前向填充、bfill后向填充
limit:前向或后向填充时的最大填充量
丢失指定轴上的项drop
丢失行方向的项
frame.drop(rowName)
丢失列方向的项
frame.drop(colName,axis = 1)
索引、选取和过滤
Series索引:
(1) 用序列编号索引
obj[1]
obj[2:4]
obj[[1,3]]
(2) 用index索引。
标签的切片运算,末端是包含的。
obj['b']
obj['b':'c']
obj[['b','d']]
DataFrame索引:
(1) 选取列
data['one']
data[['one','three']]
(2) 利用索引切片选取行
选取第一行:data[:1]
选取前两行:data[:2]
(3) 选取three列大于5的行
data[data['three']>5]
(4) 标签索引loc iloc
label形式可以是列表、切片、布尔值
frame.loc(rowLabel,colLabel)
frame.iloc[rowIndex,colIndex]
算数运算和数据对齐
对不同的索引的对象进行算术运算,结果的索引是该索引对的并集。不重叠的索引处引入NA值。
可以传入fill_value
参数来改变不重叠索引的引入值。
方法 | 说明 |
---|---|
add | 加 |
sub | 减 |
div | 除 |
mul | 乘 |
函数应用和映射
(1) apply()
函数应用到各列或行所形成的一维数组。
frame.apply(function,axis)
axis = 1 应用各行
axis = 0应用各列
例子:求极值
f = lambda x : x.max() - x.min()
frame.apply(f,axis = 1)
(2) applymap
元素级的映射函数。Series的方法是map()
。
例子:数值转换固定格式
form = lambda x:'%.2f' % x
frame.applymap(form)
排序和排名
(1) Series按索引排序sort_index()
;按值索引sort_values()
(2) DataFrame按索引排序sort_index()
,axis
参数为1列方向排序;by
按某列或某几列排序
(3) rank()
排名值。
rank(axis, method=)
min:使用整个分组的最小排名。
max:使用整个分组的最大排名。
average:默认。
first:按值在原始数据中的出现顺序分配排名。
带有重复值的轴索引
(1)is_unique
查看索引是否是唯一的。
(2)如果某个索引对应多个值,选取结果会是一个Series。
汇总和计算描述统计
(1) sum / mean
用于从Series中提取单个值。
frame.sum(axis,skipna)
axis为1是以行方向,默认为列方向。
skipna参数为布尔值,是否排除缺失值。
(2) cumsum
累积型。
(3) describe
产生汇总统计。
(4) frame.idxmax()
返回每一列最大值对应的行索引值。
(5) 与描述统计相关的方法
方法 | 说明 |
---|---|
count | 非NA值数量 |
describe | 汇总统计 |
max min | 最大值 最小值 |
argmax argmin | 返回最大值和最小值对应的索引位置 |
idxmax idxmin | 返回最大值和最小值对应的索引值 |
quantile | 分位数 |
sum | 总和 |
mean | 算术平均值 |
mad | 平均绝对离差 |
median | 中位数 |
var | 方差 |
std | 标准差 |
skew | 偏度 |
kurt | 峰值 |
cumsum | 累计和 |
cummin cummax | 累计最大值 累计最小值 |
cumprod | 累计积 |
diff | 一阶差分 |
pct_change | 百分比变化 |
相关系数和协方差
(1) corr()
计算Series之间的相关系数,返回结果为DataFrame。
(2) cov()
计算Series之间的协方差,返回结果为DataFrame。
(3) corrwith()
计算DataFrame与一个Series之间的相关系数。
唯一值、值计数以及成员资格
(1) 唯一值:Series.unique()
(2) 值计数:Series.value_counts(sort = True/False)
(3) 判断成员资格:Series.isin(value/list)
处理缺失数据
(1) 检测是否为NA值:isnull
notnull
(2) 滤除缺失数据:dropna()
对于DataFrame来说还有how和axis参数。
frame.dropna(how,axis)
how = 'any' 丢弃含有NA的行或列
how = 'all' 只丢弃全为NA的行或列
axis = 1 丢弃列
(3) 填充缺失数据:fillna
Series.fillna(替代常数值)
Series.fillna(method,limit)
frame.fillna({col1:替代值1,col2:替代值2})
frame.fillna(value,inplace = 是否对现有对象就地修改)
层次化索引
在一个轴上拥有多个(2个以上)索引级别。
data = pd.Series(np.random.randn(10),index = [['a','a','a','b','b','b','c','c','d','d'],
[1,2,3,1,2,3,1,2,2,3]])
(1) 外层选取数据子集。
data['b']
data['b' : 'c']
data[['b','d']]
(2) 内层选取数据子集。
data[:,2]
(3) 数据重塑。unstack()
将Series转换为DataFrame,unstack()
为相反操作。
根据级别汇总统计
frame.sum(level,axis)
level指定某条轴上求和的级别。
使用DataFrame的列作为索引
set_index()
能将一个或多个列转换为行索引。reset_index
作用相反。
frame.set_index(['c','d'],drop = True/False)
drop:是否将转换列移除,默认移除。