pandas 数据处理 demo

川长思鸟来 2022-10-18 15:52 265阅读 0赞
  1. import re
  2. import pandas as pd
  3. import numpy as np
  4. def savedata(df, name):
  5. if df is None or df.empty:
  6. pass
  7. else:
  8. # na = name.replace('.*??≥?','')
  9. na = re.sub(r'[\\\/\:\*\?\"\<\>\|\.]', "", name)
  10. df.to_csv('./errs/' + na + '.csv', encoding='utf-8', index=None)
  11. # 把需要是数字类型的数据,进行数据上的统一,非数字类型的统一处理成NaN
  12. 输入必须是数字 = ['id','age','score1','score2','score_tot']
  13. def 数字类型转换(df):
  14. for name in 输入必须是数字:
  15. # 过滤(字段i 的值--必须是str类型 )的行---> 属于异常的数据,单独存储为xx.csv
  16. bool = df[name].apply(lambda x: isinstance(x, str))
  17. if 1 in bool.values:
  18. savedata(df[name], '【数字类型数据_存在其他字符】' + name + '')
  19. # 重新赋值 (转数字类型后,覆盖原值)
  20. df[name] = pd.to_numeric(df[name], errors='coerce')
  21. # 年龄必须是int, 替换非法值为0
  22. if name == 'age':
  23. df[name]= df[name].fillna(0).astype(int)
  24. return df
  25. 状态字段 = ['isdelete']
  26. 正常状态值 = [True,'true' ,False, 'false']
  27. def 异常状态过滤(df):
  28. # (~ 取反)
  29. for name in 状态字段:
  30. # df[name].apply( lambda x: isinstance(x, str))
  31. bool1 = ~ df[name].isin(正常状态值)
  32. if 1 in bool1.values:
  33. savedata(df[name], '【状态异常】' + name)
  34. 年龄字段 = ['age']
  35. def 异常年龄限制(df):
  36. for i in 年龄字段:
  37. # 存储异常数据
  38. bool = (df[i] > 100)
  39. if 1 in bool:
  40. savedata(df[i], '【年龄异常】' + i)
  41. 数据完整性 = [
  42. ['score_tot', ['score1', 'score2']]
  43. ]
  44. def 数据完整性判断(df):
  45. for arr in 数据完整性:
  46. df_items = df[arr[1]].astype('float')
  47. df_items_sum = df_items.sum(axis=1)
  48. sum_d_count = df[arr[0]].astype('float') / (df_items_sum)
  49. # 忽略掉空值情况 ~s.isin([np.nan, np.inf, -np.inf])
  50. # 判断是否是数字
  51. is_num = ~sum_d_count.isin([np.nan, np.inf, -np.inf])
  52. # 是有效数字 & 分子/分母 !=1,保存异常数据
  53. bool = is_num & (sum_d_count != 1)
  54. if 1 in bool:
  55. list = arr[1]
  56. list.append(arr[0])
  57. list.append('name')
  58. item_name = arr[1][0].replace('.', '')
  59. savedata(df[bool][list], '【数据完整性异常】' + arr[0] + '和' + item_name + '等')
  60. # id,name,age,isdelete,score1,score2,score_tot
  61. # 1,张三,23,a,60,80,140
  62. # 2,lisi,131,false,70,80,140
  63. # 3,aaa,a2,true,90,80,140
  64. # 4,dage,36,false,70,80,150
  65. df_data=pd.read_csv("D:/software/cmder/a.csv")
  66. df=数字类型转换(df_data)
  67. 异常状态过滤(df)
  68. 异常年龄限制(df)
  69. 数据完整性判断(df)

发表评论

表情:
评论列表 (有 0 条评论,265人围观)

还没有评论,来说两句吧...

相关阅读