这是我参与8月更文挑战的第25天,活动详情查看:8月更文挑战
这里主要介绍的是pandas对DataFrame的一系列操作
给表格加表头
如果表没有表头,一定要加上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)