主要内容 #
- 了解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
-
习题 #
无