主要内容 #
- 了解Pandas的一些日常用法,如处理缺失值、导入导出等。
- 掌握Pandas的数据合并。
1. Pandas的缺失值处理 #
有时候我们导入或处理数据, 会产生一些空的或者是 NaN 数据,如何删除或者是填补这些 NaN 数据就是我们今天所要提到的内容。
首先,建立了一个6X4的矩阵数据并且把两个位置置为空。
dates = pd.date_range('20230101', periods=6)
df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates, columns=['A','B','C','D'])
#通过np.nan来设置空值
df.iloc[0,1] = np.nan
df.iloc[1,2] = np.nan
- (1):pd.dropna()
如果想直接去掉有NaN的行或列,可以直接使用dropna()
df.dropna(
axis=0, # 0: 对行进行操作; 1: 对列进行操作
how='any' # 'any': 只要存在 NaN 就 drop 掉; 'all': 必须全部是 NaN 才 drop
)
- (2):pd.fillna()
如果是将 NaN 的值用其他值代替, 比如代替成 0,可以用fillna():
df.fillna(value=0)
- (3):pd.isnull()
判断是否有缺失数据 NaN, 为 True 表示缺失数据:
df.isnull()
2. Pandas 数据导入与导出 #
pandas可以读取与存取的资料格式有很多种,像csv、excel、json、html与pickle等…
-
-
- (1):读取csv
-
在自己目录下创建一个csv文件,命名为student.csv
则读取代码如下:
import pandas as pd #加载模块
#读取csv
data = pd.read_csv('student.csv')
#打印出data
print(data)
pd.read_csv()有多种参数,其中比较重要的有:
* sep:读取csv文件时指定的分隔符,默认为逗号。如果是文本文件,则sep=’\t’。
* usecols:如果一个数据有很多列,但是我们在读取的时候只想要其中的某几列,就可以使用这个参数。
pd.read_csv('student.csv',sep=',',usecols=['name','class'])
-
-
- (2):将dataframe存储成csv或pickle
-
data.to_csv('student.csv')
data.to_pickle('student.pickle')
pd.to_csv()与read_csv()一样有很多参数,其中最有用的参数为:
* sep:分隔符,如果sep=’\t’,则保存的是以\t为分隔符的文件
* index:是否保留行索引,默认为True,若不保留则index=0
3. Pandas合并DataFrame #
-
-
- (1):Pandas合并 concat
-
pandas处理多组数据的时候往往会要用到数据的合并处理,使用 concat是一种基本的合并方式.而且concat中有很多参数可以调整,合并成你想要的数据形式。
axis为合并方向,默认为axis=0,即按行合并;axis=1,则为按列合并
import pandas as pd import numpy as np df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d']) df2 = pd.DataFrame(np.ones((3,4))*1, columns=['a','b','c','d']) df3 = pd.DataFrame(np.ones((3,4))*2, columns=['a','b','c','d']) #concat纵向合并 res = pd.concat([df1, df2, df3], axis=0) #concat横向合并 res = pd.concat([df1, df2, df3], axis=1)
join(合并方式)
join=’outer’为预设值,因此未设定任何参数时,函数默认join=’outer’。此方式是依照column来做纵向合并,有相同的column上下合并在一起,其他独自的column个自成列,原本没有值的位置皆以NaN填充。
df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d'], index=[1,2,3]) df2 = pd.DataFrame(np.ones((3,4))*1, columns=['b','c','d','e'], index=[2,3,4]) #纵向"外"合并df1与df2 res = pd.concat([df1, df2], axis=0, join='outer') #纵向"内"合并df1与df2 res = pd.concat([df1, df2], axis=0, join='inner') #重置index并打印结果 res = pd.concat([df1, df2], axis=0, join='inner', ignore_index=True)
-
-
- (2):Pandas合并 merge
-
pandas中的merge和concat类似,但主要是用于两组有key column的数据,统一索引的数据。通常也被用在Database的处理当中。
合并时有4种方法how = [‘left’, ‘right’, ‘outer’, ‘inner’],预设值how=’inner’。
依据一组key合并:
import pandas as pd
#定义资料集并打印出
left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
#依据key column合并,并打印出
res = pd.merge(left, right, on='key')
#依据不同column名来合并
res = pd.merge(left,right,left_on='A', right_on='C',how='inner')
依据两组key合并:
left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'],
'key2': ['K0', 'K1', 'K0', 'K1'],
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],
'key2': ['K0', 'K0', 'K0', 'K0'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
#依据key1与key2 columns进行合并,并尝试打印出四种结果['left', 'right', 'outer', 'inner']
res = pd.merge(left, right, on=['key1', 'key2'], how='inner')
print(res)
3. 小结 #
-
-
- 熟悉并掌握Pandas的一些日常用法,如处理缺失值、导入导出等
- 熟悉掌握Panda合并的两种用法:concat和merge
-
习题 #
无