3.22 sum() ---- 求和
l = [ pd.Series([1,2,3], index=['a', 'b', 'c']), pd.Series([1,3], index=['a', 'c']), pd.Series([2,3], index=['b', 'c']) ] df = pd.DataFrame(l) print(df) print() # 默认对每列进行求和 print(df.sum()) # 对每列进行求和 print(df.sum(axis=0)) print() # 对每行进行求和 print(df.sum(axis=1))
3.23 dropna() ---- 删除缺失值
参数:
- axis:表示轴向,0为删除行,1为删除列,默认为0.
- how:接收 string 为参数,表示删除的方式,any 表示只要有缺失值就删除该行或列,all表示全部为缺失值才删除行或列。默认为any。
- subset:接收 array 类型的数据为参数,表示进行缺失值处理的行或列,默认为None,表示所有的行或列。
- inplace:表示是否在原表上进行操作,默认为False。
l = [ pd.Series([1,2,3], index=['a', 'b', 'c']), pd.Series([1,3], index=['a', 'c']), pd.Series([2,3], index=['b', 'c']) ] df = pd.DataFrame(l) print(df) print() # 默认执行删除行操作,只要有缺失值就执行删除操作 # 默认对所有的列进行处理 # 默认不在原表上进行修改 print(df.dropna()) print() print(df)
l = [ pd.Series([1,2,3], index=['a', 'b', 'c']), pd.Series([1,3], index=['a', 'c']), pd.Series([2,3], index=['b', 'c']) ] df = pd.DataFrame(l) print(df) print() # 有缺失值时删除列 # 对第三行进行处理 # 在原表上进行修改,不在原表上进行修改会返回修改后的新表 # 有缺失值就进行删除 print(df.dropna(axis=1, subset=[2], inplace=True, how='any')) print() print(df)
3.24 fillna() ---- 替换缺失值
参数:
- value:表示用来替换缺失值的值
- method:接收 string 为参数,backfill或bfill表示使用下一个非缺失值进行替换,pad或ffill表示使用上一个非缺失值进行替换,默认为None
- axis:表示轴向
- inplace:表示是否在原表上进行操作,默认为False。
- limit:表示填补缺失值的个数上限,默认为None
- value与method选择其一即可
l = [ pd.Series([1,2,3], index=['a', 'b', 'c']), pd.Series([1,3], index=['a', 'c']), pd.Series([2,3], index=['b', 'c']) ] df = pd.DataFrame(l) print(df) print() # 使用 999 填补缺失值 # 不在原表进行修改 print(df.fillna(999)) print() print(df)
l = [ pd.Series([1,2,3], index=['a', 'b', 'c']), pd.Series([1,3], index=['a', 'c']), pd.Series([2,3], index=['b', 'c']) ] df = pd.DataFrame(l) print(df) print() # 使用后一个非缺失值进行填补 # 轴向为列,使用后一列的非缺失值进行填补 # 在原表上进行修改 print(df.fillna(method='bfill', axis=1, inplace=True)) print() print(df)
3.25 info() ---- 获取 DataFrame 中数据的简要摘要
df = pd.read_excel('./数据文件/信表节点的坐标.xlsx') df.info()
3.26 count() ---- 统计每列中不为空的值的个数
df = pd.read_excel('./数据文件/信表节点的坐标.xlsx') df.count()
3.27 copy() ---- 对DateFrame对象进行复制
参数:
deep:deep=True,表示进行深复制;deep=False,表示进行浅复制。默认为 True。
data1 = data.iloc[0:2, 0:3] data2 = data1.copy() data2['SO2监测浓度(μg/m³)'][0] = 1 data1
data1 = data.iloc[0:2, 0:3] data2 = data1.copy(deep=False) data2['SO2监测浓度(μg/m³)'][0] = 1 data1
4. DataFrame 的常用操作
4.1 列的访问
DataFrame 的单列数据为一个 Series 。根据 DataFrame 的定义,DataFrame 是一个带有标签的二维数组,每个标签相当于每一列的列名。
4.1.1 根据标签索引进行访问
l = [ ['zs', 12, 'm'], ['ls', 23, 'm'], ['ww', 22, 'm'] ] df1 = pd.DataFrame( l, columns=['name', 'age', 'gender'], index=['a', 'b', 'c'] ) print(df1) print() print(df1['name']) print() # 注意为 嵌套列表 print(df1[['name', 'gender']])
4.1.2 根据数字索引进行访问
l = [ ['zs', 12, 'm'], ['ls', 23, 'm'], ['ww', 22, 'm'] ] df1 = pd.DataFrame( l, columns=['name', 'age', 'gender'], index=['a', 'b', 'c'] ) print(df1) print() print(df1[df1.columns[0]]) print() print(df1[df1.columns[0:3:2]]) print() print(df1[df1.columns[-1:0:-2]])
4.2 列的添加
DataFrame 添加列,只需要新建一个列索引,并对该索引下的数据进行赋值操作即可。
l = [ ['zs', 12], ['ls', 23], ['ww', 22] ] df1 = pd.DataFrame( l, columns=['name', 'age'], index=['a', 'b', 'c'] ) print(df1) print() # Series 需要设置索引 df1['gender'] = pd.Series(['m','m','m'], index=['a', 'b', 'c']) print(df1) df1['a'] = [1, 2, 3] print(df1)
4.3 列的删除
删除某列数据,需要用 pandas 提供的方法 pop 或 drop 方法。
4.3.1 pop()
l = [ ['zs', 12], ['ls', 23], ['ww', 22] ] df1 = pd.DataFrame( l, columns=['name', 'age'], index=['a', 'b', 'c'] ) df1['gender'] = pd.Series(['m','m','m'], index=['a', 'b', 'c']) df1['a'] = [1, 2, 3] print(df1) print() # 返回删除的列 # 一次只能删除一列,对原数组进行修改 res = df1.pop('a') print(df1) print() print(res)
4.3.2 drop()
l = [ ['zs', 12], ['ls', 23], ['ww', 22] ] df1 = pd.DataFrame( l, columns=['name', 'age'], index=['a', 'b', 'c'] ) df1['gender'] = pd.Series(['m','m','m'], index=['a', 'b', 'c']) df1['a'] = [1, 2, 3] print(df1) print() # drop 不对原数组进行修改,会返回一个新数组 # 支持多列删除 # axis 指定删除列还是行 列(1) 行(0) # axis 默认取值为 0 res = df1.drop('a', axis=1) print(df1) print() print(res) print() res = df1.drop(['age', 'gender'], axis=1) print(df1) print() print(res)