Python数据分析(三)
打卡第七天啦!!!
pandas库(二)
pandas索引操作
index对象
- Series和DataFrame中的索引都是Index对象
import pandas as pd
import numpy as np
ps = pd.Series(range(5),index=['a','b','c','d','e'])
print(ps)
print(type(ps.index))
pd1 = pd.DataFrame(np.arange(9).reshape(3,3),index=['a','b','c'],columns=['A','B','C'])
print(pd1)
print(type(pd1.index))
print(type(pd1.columns))
- 索引对象不可变,保证数据安全
- 常见的index种类:Index索引、Int64Index整数索引、MultiIndex层级索引、DatetimeIndex时间戳类型
重新索引
reindex创建一个符合新索引的新对象
- Series中的重新索引
ps1 = ps.reindex(['a','b','c','d','e','f'])
print(ps1)
- DataFrame中的重新索引
pd2 = pd1.reindex(index=['a','b','c','d'])
print(pd2)
pd3 = pd1.reindex(columns=['C','B','A'])
print(pd3)
增
- Series中的增加操作
s1 = pd.Series({'f':999})
ps4 = ps.append(s1)
print(ps4)
- DataFrame中的增加操作
pd1.insert(0,'E',[9,99,999])
print(pd1)
pd1.loc['d'] = [1,1,1,1]
print(pd1)
row = {'E':6,'A':6,'B':6,'C':6}
pd5 = pd1.append(row,ignore_index=True)
print(pd5)
删
- Series中的删除操作,其中分为两种情况,一种是直接在原数据上进行删除,另外一种是先拷贝一份再进行删除
(1)在原数据上直接进行删除
del ps['e']
print(ps)
(2)不在原数据上直接进行删除,删除后返回新对象
ps1 = ps.drop('d')
print(ps1)
ps1 = ps.drop(['c','d'])
print(ps1)
- DataFrame中的删除操作,其中分为两种情况,一种是直接在原数据上进行删除,另外一种是先拷贝一份再进行删除
(1)在原数据上直接进行删除(使用del关键字,但只能删除列)
del pd1['E']
print(pd1)
(2)不在原数据上直接进行删除,删除后返回新对象(使用drop方法,通过设置axis可以删除行或列)
pd2 = pd1.drop('a')
print(pd2)
pd2 = pd1.drop('A',axis=1)
print(pd2)
- 需要注意的是,使用drop也可以在原数据上直接进行修改,只需要设置inplace属性
ps.drop('d',inplace=True)
print(ps)
改
- Series中的修改操作,直接使用索引修改
ps1['a'] = 999
ps1
ps1[0] = 1000
ps1
- DataFrame中的修改操作,可以使用索引修改,或使用对象.列的方式修改,但只能修改列数据,另一种方法是使用loc标签索引修改数据,可以修改行数据,以及某一行某一列的具体数据
pd1['A'] = 9
print(pd1)
pd1['A'] = [9,10,11]
print(pd1)
pd1.A = 6
print(pd1)
pd1.loc['a'] = 9
print(pd1)
pd1.loc['a','A'] = 1000
print(pd1)
查
Series中的查找操作
- 行索引
ps1
print(ps1['a'])
print(ps1[0])
- 切片索引,需要注意的是,利用位置切片索引,不包含终止索引;利用标签切片索引,包含终止索引。
print(ps1[1:4])
print(ps1['b':'d'])
- 不连续索引
print(ps1[['b','e']])
print(ps1[[0,2,3]])
- 布尔索引
ps1[ps1>2]
DataFrame中的查找操作
- 列索引,通过列索引查找某一列数据,返回Series对象,需要注意的是,在取多列数据时,用两个中括号。
pd1['A']
print(pd1[['A','C']])
- 通过列索引和行索引取到某一行某一列的具体数据
pd1['A']['a']
- 切片索引,此时的切片是针对行来说的
print(pd1[:2])
高级索引
loc标签索引
ps1.loc['a':'c']
ps1['a':'c']
pd1.loc['a':'b','A':'C']
iloc位置索引
ps1.iloc[1:3]
ps1[1:3]
print(pd1.iloc[0:3,0:2])
ix标签与位置混合索引(不推荐使用)
pandas库(三)
对齐运算
算术运算和数据对
s1 = pd.Series(np.arange(4),index=['a','b','c','d'])
s2 = pd.Series(np.arange(5),index=['a','c','e','f','g'])
s1+s2
df1 = pd.DataFrame(np.arange(12).reshape(4,3),index=['a','b','c','d'],columns=list('ABC'))
df2 = pd.DataFrame(np.arange(9).reshape(3,3),index=['a','d','f'],columns=list('ABD'))
print(df1+df2)
填充值
s1.add(s2,fill_value=0)
print(df1.add(df2,fill_value=0))
DataFrame和Series混合运算
- 匹配列索引
s3 = df1.iloc[0]
s3
print(df1 - s3)
- 匹配行索引
s4 = df1['A']
s4
print(df1.sub(s4,axis=0))
函数应用
apply和applymap
- 通过apply将函数应用到列或行
print(df)
f = lambda x:x.max()
df.apply(f)
df.apply(f,axis=1)
- 通过applymap将函数应用到每个数据
f2 = lambda x:'%.2f'%x
print(df.applymap(f2))
排序
- 索引排序
s1 = pd.Series(np.arange(4),index=list('dbca'))
s1
s1.sort_index()
s1.sort_index(ascending = False)
pd1 = pd.DataFrame(np.arange(12).reshape(4,3),index=list('bdca'),columns=list('BCA'))
print(pd1.sort_index())
print(pd1.sort_index(axis=1))
- 按值排序
(1)NAN值排最后 (2)指定ascending属性可以降序或升序排列 (3)DataFrame需要指定列进行排序,也可以指定多列
s1.sort_values()
s1['a'] = np.nan
s1.sort_values()
s1.sort_values(ascending = False)
pd2 = pd.DataFrame({'a':[3,7,9,0],'b':[1,-1,4,8],'c':[0,6,-3,2]})
print(pd2)
print(pd2.sort_values(by='a'))
print(pd2.sort_values(by=['a','b']))
唯一值和成员属性
- 使用unique方法查找唯一值
s1 = pd.Series([2,6,8,9,3,6],index=['a','a','c','c','e','e'])
s2 = s1.unique()
- 使用is_unique判断是否唯一
s1.index.is_unique
s1.is_unique
- 使用value_counts方法计算每个值出现的个数
s1 = pd.Series([2,6,8,9,3,6])
s1.value_counts()
- 判断数据是否存在
s1.isin([8])
data = pd.DataFrame({'a':[3,7,9,0],'b':[1,-1,4,8],'c':[0,6,-3,2]})
print(data.isin([2,4]))
处理缺失数据
- 判断是否存在缺失值
df3 = pd.DataFrame([np.random.randn(3),[1.,2.,np.nan],
[np.nan,4.,np.nan],[1.,2.,3.]])
df3.isnull()
- 丢弃缺失数据
df3.dropna()
df3.dropna(axis=1)
- 填充缺失数据
df3.fillna(-1)
层级索引
- 选取指定外层索引和内层索引
s1 = pd.Series(np.random.randn(12),index=[['a','a','a','b','b','b','c','c','c','d','d','d'],[0,1,2,0,1,2,0,1,2,0,1,2]])
print(type(s1.index))
s1['b']
s1[:,2]
s1['a',2]
- 交换内层索引和外层索引
s1.swaplevel()
pandas统计计算和描述
df = pd.DataFrame([[1.4,np.nan],[7.1,-4.5],
[np.nan,np.nan],[0.75,-1.3]],
index=['a','b','c','d'],
columns=['one','two'])
df.sum()
df.sum(axis=1)
df.sum(axis=1,skipna=False)
df.idxmax()
df.cumsum()
df.describe()
s1 = pd.Series(['a','a','b','c']*4)
s1.describe()
|