FINLAB

07

Oct 6th, 2019
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.36 KB | None | 0 0
  1. '''
  2. 1. 移除重複值
  3. '''
  4. import pandas as pd
  5. df = pd.DataFrame({'col1':['a','a','a','b','b','c','d','e'],'col2':[1,1,2,2,3,3,4,5]})
  6. df
  7. df.duplicated()
  8. df.drop_duplicates()
  9.  
  10. # 針對所選column的duplicate值移除(預設會留下重複列的第一個)
  11. df.drop_duplicates(['col1','col2'])
  12. df.drop_duplicates(['col1'])
  13. df.drop_duplicates(['col1']).reset_index(drop=True)
  14.  
  15. # 針對所選column的duplicate值移除(挑選重複列的最後一個)
  16. df.drop_duplicates(['col1'], keep='last')
  17.  
  18. '''
  19. 2. 遺失值(Missing Data)
  20. '''
  21. import pandas as pd
  22. df = pd.DataFrame({'col1':['a',float('NaN'),'a',None,'b','c','d','e'],'col2':[1,1,3,2,float('NaN'),3,4,5]})
  23. df
  24. df['col1'].isnull()
  25. df = df[df['col1'].notnull()]
  26. df
  27. df = df[df['col2'].notnull()]
  28. df
  29. df = df.dropna()
  30. df
  31.  
  32. '''
  33. 2.1 遺失值補值
  34. '''
  35. from scipy import stats
  36. df = pd.DataFrame({'學歷':[4,float('NaN'),3,None,4,1,2,5],'薪水':[18,25,30,22,float('NaN'),33,41,14]})
  37.  
  38. temp_mode = stats.mode(df['學歷'])[0][0]
  39. df['學歷'] = df['學歷'].fillna(temp_mode)  #若遺失值為類別型,補上眾數
  40. df
  41. df['薪水'] = df['薪水'].fillna(df['學歷'].mean())  #若遺失值為連續型,補上平均數
  42. df
  43.  
  44. '''
  45. 3. 資料對應轉換(Mapping)
  46. '''
  47. df = pd.DataFrame({'sex':['male','male','female','male','female','female']})
  48. df
  49. sex_to_boolean = {'female':0,'male':1} #dict
  50. df['code'] = df['sex'].map(sex_to_boolean)
  51. df
  52.  
  53. '''
  54. 3.1 資料取代
  55. '''
  56. df = pd.DataFrame({'col1':['c01','c02','c03','c04','c05'],'col2':[65,'NULL','NaN','NaN',78],'col3':[321,34,'NULL','NaN',34]})
  57. df
  58. df['col2'].replace('NaN',0)
  59. df.replace('NaN',0)
  60. df.replace(['NaN','NULL'],0)
  61. df.replace({'NaN':0,'NULL':-1})  #dictionary
  62.  
  63. '''
  64. 3.2 One-Hot-Encoding
  65. '''
  66. import pandas as pd
  67. df = pd.DataFrame({'部門':['會計','業務','業務','研發','管理','會計','研發','人事'], '薪水':[10,25,34,22,15,18,30,22]})
  68. df
  69. dummy_code = pd.get_dummies(df['部門'])
  70. dummy_code
  71. df = df.drop('部門', axis=1)
  72. df = df.join(dummy_code)
  73. df
  74.  
  75. '''
  76. 4. 分箱、轉換
  77. '''
  78. df = pd.DataFrame({'id':['s01','s02','s03','s04','s05'],'score':[74,59,98,84,60]})
  79. df
  80. bins = [0,60,70,80,90,100]
  81. pd.cut(df['score'],bins)
  82. pd.cut(df['score'],bins, right=False)
  83. labels = ['F','D','C','B','A']
  84. pd.cut(df['score'],bins, right=False, labels=labels)
  85. df['label'] = pd.cut(df['score'],bins, right=False, labels=labels)
  86. df
Advertisement
Add Comment
Please, Sign In to add comment