• 售前

  • 售后

热门帖子
入门百科

pandas快速处理惩罚Excel,替换Nan,转字典的操作

[复制链接]
沙941 显示全部楼层 发表于 2021-10-26 14:10:42 |阅读模式 打印 上一主题 下一主题
pandas读取Excel
  1. import pandas as pd
  2. # 参数1:文件路径,参数2:sheet名
  3. pf = pd.read_excel(path, sheet_name='sheet1')
复制代码
删除指定列
  1. # 通过列名删除指定列
  2. pf.drop(['序号', '替代', '签名'], axis=1, inplace=True)
复制代码
替换列名
  1. # 旧列名 新列名对照
  2. columns_map = {
  3.     '列名1': 'newname_1',
  4.     '列名2': 'newname_2',
  5.     '列名3': 'newname_3',
  6.     '列名4': 'newname_4',
  7.     '列名5': 'newname_5',
  8.     # 没有列名的情况
  9.     'Unnamed: 10': 'newname_6',
  10. }
  11. new_fields = list(columns_map.values())
  12. pf.rename(columns=columns_map, inplace=True)
  13. pf = pf[new_fields]
复制代码
替换 Nan

通常使用
  1. pf.fillna('新值')
复制代码
替换表格中的空值,(Nan)。
但是,你大概会发现 fillna() 会有不好使的时间,记得加上 inplace=True
  1. # 加上 inplace=True 表示修改原对象
  2. pf.fillna('新值', inplace=True)
复制代码
官方对 inplace 的表明
  1. inplace : boolean, default False
  2. If True, fill in place. Note: this will modify any other views on this object, (e.g. a no-copy slice for a column in a DataFrame).
复制代码
全列输出不隐蔽

你大概会发现,输出表格的时间会出现隐蔽中间列的环境,只输出首列和尾列,中间用 … 替代。
加上下面的这句话,再打印的话,就会全列打印。
  1. pd.set_option('display.max_columns', None)
  2. print(pf)
复制代码
将Excel转换为字典
  1. pf_dict = pf.to_dict(orient='records')
复制代码
全部代码
  1. import pandas as pd
  2. pf = pd.read_excel(path, sheet_name='sheet1')
  3. columns_map = {
  4.     '列名1': 'newname_1',
  5.     '列名2': 'newname_2',
  6.     '列名3': 'newname_3',
  7.     '列名4': 'newname_4',
  8.     '列名5': 'newname_5',
  9.     # 没有列名的情况
  10.     'Unnamed: 10': 'newname_6',
  11. }
  12. new_fields = list(columns_map.values())
  13. pf.drop(['序号', '替代', '签名'], axis=1, inplace=True)
  14. pf.rename(columns=columns_map, inplace=True)
  15. pf = pf[new_fields]
  16. pf.fillna('Unknown', inplace=True)
  17. # pd.set_option('display.max_columns', None)
  18. # print(smt)
  19. pf_dict = pf.to_dict(orient='records')
复制代码
补充:python pandas replace 0替换成nan,bfill/ffill
0替换成nan

一样平常环境下,0 替换成nan会写成
  1. df.replace(0, None, inplace=True)
复制代码
然而替换不了,应该是这样的
  1. df.replace(0, np.nan, inplace=True)
复制代码
nan替换成前值后值
  1. df.ffill(axis=0) # 用前一个值替换
  2. df.bfill(axis=0) # 用后一个值替换
复制代码
以上为个人经验,希望能给各人一个参考,也希望各人多多支持脚本之家。如有错误或未思量完全的地方,望不吝见教。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作