pandas基本操作

224 阅读2分钟

这是我参与11月更文挑战的第18天,活动详情查看:2021最后一次更文挑战

这里主要介绍的是pandas对DataFrame的一系列操作

DataFrame生成

  1. 直接生成 df = pd.DataFrame(value, index='', columns='')
  2. 字典转化为df df = pd.DataFrame(dic1)
  3. 读取txt/excel文件时,输出的就是df格式 df = pd.read_excel('XX.xlsx')
  4. 从矩阵A转化为df df = pd.DataFrame.from_records(A, columns=name)

给表格加表头

如果表没有表头,一定要加上header = None,否则第一行会被作为表头

  1. 读取文件内容的时候重命名

    df = pd.read_excel('文件路径', names = name(['列1','列2']) )

  2. 读取后命名

    df.columns = name

重置索引,覆盖原始数据

df.reset_index(drop = True, inplace = True)

删除某列

  1. del df['列名']
  2. df.drop('列', axis = 1) - 不改变原始数据
  3. df.drop('列', axis = 1, inplace = True) - 覆盖掉原始数据

去掉某行全为空的情况

df.dropna(how='all', inplace = True)

处理异常值 - 删除/均值/高频值

  1. 均值 - df['列名'].fillna(df['列名'].mean(), inplace = True)
  2. 高频值 - df['列名'].value_counts().index[0] - 最高频的值

对某行格式进行转换

  1. 找到需要转换的所有数据 - 给表加一列判断列

    df['rows_with_lbs'] = df['weight'].str.contains('lbs').fillna(False)
    df['weight'].str.contains('lbs') - 找到weight列包含了lbs的行
    fillna(False) - 给NaN赋值为False

  2. iterrows() 遍历每行 - 通过rows_with_lbs可直接遍历出是lbs的行,返回序列和该序列本身的对象
    for i, lbs_row in df[rows_with_lbs].iterrows()

  3. 取出该对象的某列值进行转换
    weight = int(float(lbs_row['weight'][:-3])/2.2)

  4. 将转换后的值赋值给表对应那行 - 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)