这是我参与11月更文挑战的第18天,活动详情查看:2021最后一次更文挑战
这里主要介绍的是pandas对DataFrame的一系列操作
DataFrame生成
- 直接生成 df = pd.DataFrame(value, index='', columns='')
- 字典转化为df df = pd.DataFrame(dic1)
- 读取txt/excel文件时,输出的就是df格式 df = pd.read_excel('XX.xlsx')
- 从矩阵A转化为df df = pd.DataFrame.from_records(A, columns=name)
给表格加表头
如果表没有表头,一定要加上header = None,否则第一行会被作为表头
-
读取文件内容的时候重命名
df = pd.read_excel('文件路径', names = name(['列1','列2']) )
-
读取后命名
df.columns = name
重置索引,覆盖原始数据
df.reset_index(drop = True, inplace = True)
删除某列
- del df['列名']
- df.drop('列', axis = 1) - 不改变原始数据
- df.drop('列', axis = 1, inplace = True) - 覆盖掉原始数据
去掉某行全为空的情况
df.dropna(how='all', inplace = True)
处理异常值 - 删除/均值/高频值
- 均值 - df['列名'].fillna(df['列名'].mean(), inplace = True)
- 高频值 - df['列名'].value_counts().index[0] - 最高频的值
对某行格式进行转换
-
找到需要转换的所有数据 - 给表加一列判断列
df['rows_with_lbs'] = df['weight'].str.contains('lbs').fillna(False)
df['weight'].str.contains('lbs') - 找到weight列包含了lbs的行
fillna(False) - 给NaN赋值为False -
iterrows() 遍历每行 - 通过rows_with_lbs可直接遍历出是lbs的行,返回序列和该序列本身的对象
for i, lbs_row in df[rows_with_lbs].iterrows() -
取出该对象的某列值进行转换
weight = int(float(lbs_row['weight'][:-3])/2.2) -
将转换后的值赋值给表对应那行 - df.at(i, 'weight')
df.at(i, 'weight') = '{}kgs'.format(weight)
去除非ASCII字符
df['first_name'].replace({ r'[\x00 - \x7F]+' : '' }, regex = True, inplace = True)
replace(旧值,新值, regex = True:支持正则表达式) r - 去除转义字符,多用于正则表达式
[\x00-\x7F]等同于[x00-x7F]: ASCII值从0-127的字符
唯一性:将一列有多个参数进行分割 - split(expand = True) - expand指将分割的内容作为一列
df[['first_name', 'last_name']] = df['name'].str.split(expand = True)
去除重复数据行 - df.duplicates()
df.drop_duplicates(['first_name', 'last_name'], inplace = True)