Python数据处理的一些总结-1

[python] view plain copy
  1. import pandas as pd  
  2. import numpy as np  
  3.   
  4. #载入数据  
  5. train=pd.read_csv('Train.csv')  
  6. test=pd.read_csv('Test.csv')  
  7.   
  8. #显示一下数据的大小  
  9. #可以通过train.shape, test.shape查看  
  10.   
  11. train.dtypes#查看每个属性的类型  
  12. train.head(5)#查看前五条数据  
  13. #合并成一个总的data  
  14. train['source']='train'  
  15. test['source']='test'  
  16. data=pd.concat([train, test], ignore_index=True)  

注意,最后一条数据的igonore_index的属性我来解释一下啦

比如有两个表myTrain.csv, myTest.csv,其中,两个表的内容分别是:

myTrain.csv

a b
1 5
2 6
3 7
4 8
myTset.csv
a b
1 5
2 6
3 7
4 8
[python] view plain copy
  1. data=pd.concat([train, test], ignore_index=True)  
执行上面的代码,结果如下:

Python数据处理的一些总结-1

注意看前面的索引值,其实,对于myTrain.csv和myTest.csv两个表来说都有一个自己的索引值,然后在组合的时候这边忽略了

再看:

Python数据处理的一些总结-1

看了这个图片就一目了然了,其实就是索引是否要重新开始而已

好了,我们继续看看下面的代码把:

[python] view plain copy
  1. #在实际的应用中很重的是观察异常点,比如说异常值;  
  2. data.apply(lambda x:sum(x.isnull()))  

这里看一段代码:

Python数据处理的一些总结-1

Python数据处理的一些总结-1

关于lambda表达是解释:Python的lambda表达式可以看看这个博客,随便百度啦,很多解释的,挺容易理解的


字段,分别有多少种取值


[python] view plain copy
  1. var = ['Gender','Salary_Account','Mobile_Verified','Var1','Filled_Form','Device_Type','Var2','Source']  
  2. for v in var:  
  3.     print '\n%s这一列数据的不同取值和出现的次数\n'%v  
  4.     print data[v].value_counts()  
  5. #看看某一个字段与多少的不同的取值  
  6. len(data['City'].unique())#data['City'].unique()给出的结果是在该属性下不同城市的名字都列出来  
  7.   
  8. #如果要删除该属性,可以用下面的额代码  
  9. data.drop('City',axis=1,inplace=True)  

需要解释一下这里的axis=1和,inplace了,话不多说,上图片

Python数据处理的一些总结-1


明白了把,axis=0表示的是要对横坐标操作,axis=1是要对纵坐标操作

inplace=False表示要对结果显示,而True表示对结果不显示


[python] view plain copy
  1. #DOB是出生的具体日期,咱们要具体日期作用没那么大,年龄段可能对我们有用,所有算一下年龄好了  
  2. #创建一个年龄的字段Age  
  3. data['Age'] = data['DOB'].apply(lambda x: 115 - int(x[-2:]))  
  4.   
  5. data.drop('DOB',axis=1,inplace=True)#删除原先的字段  
  6.   
  7.   
  8. data.boxplot(column=['EMI_Loan_Submitted'],return_type='axes')#画出箱线图  
  9.   
  10. #好像缺失值比较多,干脆就开一个新的字段,表明是缺失值还是不是缺失值  
  11. data['EMI_Loan_Submitted_Missing'] = data['EMI_Loan_Submitted'].apply(lambda x: 1 if pd.isnull(x) else 0)  
  12. data[['EMI_Loan_Submitted','EMI_Loan_Submitted_Missing']].head(10)  
  13. data.drop('EMI_Loan_Submitted',axis=1,inplace=True)  
  14. #看看个数  
  15. len(data['Employer_Name'].value_counts())  
  16. #看看某一字段的信息  
  17. data['Existing_EMI'].describe()  
  18. #缺省值不多,用均值代替  
  19. data['Existing_EMI'].fillna(0, inplace=True)  
  20.   
  21. #找中位数去填补缺省值(因为缺省的不多)  
  22. data['Loan_Amount_Applied'].fillna(data['Loan_Amount_Applied'].median(),inplace=True)  
  23. data['Loan_Tenure_Applied'].fillna(data['Loan_Tenure_Applied'].median(),inplace=True)  
  24.   
  25.   
  26. #处理source  
  27. data['Source'] = data['Source'].apply(lambda x: 'others' if x not in ['S122','S133'else x)  
  28. data['Source'].value_counts()  
  29.   
  30. #数值编码  
  31. from sklearn.preprocessing import LabelEncoder  
  32. le = LabelEncoder()  
  33. var_to_encode = ['Device_Type','Filled_Form','Gender','Var1','Var2','Mobile_Verified','Source']  
  34. for col in var_to_encode:  
  35.     data[col] = le.fit_transform(data[col])  
解释一下data[col] = le.fit_transform(data[col]),看图:
原来的读入文件是:

Python数据处理的一些总结-1

来编码啦,继续看图:

Python数据处理的一些总结-1

明白了,就是给不同的数字编码呀,起到区分作用的



关键部分的代码如下

[python] view plain copy
  1. import pandas as pd  
  2. import numpy as np  
  3.   
  4. #载入数据  
  5. train=pd.read_csv('Train.csv')  
  6. test=pd.read_csv('Test.csv')  
  7.   
  8. #显示一下数据的大小  
  9. #可以通过train.shape, test.shape查看  
  10.   
  11. train.dtypes#查看每个属性的类型  
  12. train.head(5)#查看前五条数据  
  13. #合并成一个总的data  
  14. train['source']='train'  
  15. test['source']='test'  
  16. data=pd.concat([train, test], ignore_index=True)  
  17.   
  18.   
  19.   
  20. #在实际的应用中很重的是观察异常点,比如说异常值;  
  21. data.apply(lambda x:sum(x.isnull()))  
  22.   
  23. #要对数据有更深的认识,比如说,咱们看看这些字段,分别有多少种取值(甚至你可以看看分布)  
  24. var = ['Gender','Salary_Account','Mobile_Verified','Var1','Filled_Form','Device_Type','Var2','Source']  
  25. for v in var:  
  26.     print '\n%s这一列数据的不同取值和出现的次数\n'%v  
  27.     print data[v].value_counts()  
  28.   
  29. #看看某一个字段与多少的不同的取值  
  30. len(data['City'].unique())#data['City'].unique()给出的结果是在该属性下不同城市的名字都列出来  
  31.   
  32. #如果要删除该属性,可以用下面的额代码  
  33. data.drop('City',axis=1,inplace=True)  
  34.   
  35.   
  36.   
  37. #DOB是出生的具体日期,咱们要具体日期作用没那么大,年龄段可能对我们有用,所有算一下年龄好了  
  38. #创建一个年龄的字段Age  
  39. data['Age'] = data['DOB'].apply(lambda x: 115 - int(x[-2:]))  
  40.   
  41. data.drop('DOB',axis=1,inplace=True)#删除原先的字段  
  42.   
  43.   
  44. data.boxplot(column=['EMI_Loan_Submitted'],return_type='axes')#画出箱线图  
  45.   
  46. #好像缺失值比较多,干脆就开一个新的字段,表明是缺失值还是不是缺失值  
  47. data['EMI_Loan_Submitted_Missing'] = data['EMI_Loan_Submitted'].apply(lambda x: 1 if pd.isnull(x) else 0)  
  48. data[['EMI_Loan_Submitted','EMI_Loan_Submitted_Missing']].head(10)  
  49. data.drop('EMI_Loan_Submitted',axis=1,inplace=True)  
  50. #看看个数  
  51. len(data['Employer_Name'].value_counts())  
  52. #看看某一字段的信息  
  53. data['Existing_EMI'].describe()  
  54. #缺省值不多,用均值代替  
  55. data['Existing_EMI'].fillna(0, inplace=True)  
  56.   
  57. #找中位数去填补缺省值(因为缺省的不多)  
  58. data['Loan_Amount_Applied'].fillna(data['Loan_Amount_Applied'].median(),inplace=True)  
  59. data['Loan_Tenure_Applied'].fillna(data['Loan_Tenure_Applied'].median(),inplace=True)  
  60.   
  61.   
  62. #处理source  
  63. data['Source'] = data['Source'].apply(lambda x: 'others' if x not in ['S122','S133'else x)  
  64. data['Source'].value_counts()  
  65.   
  66. #数值编码  
  67. from sklearn.preprocessing import LabelEncoder  
  68. le = LabelEncoder()  
  69. var_to_encode = ['Device_Type','Filled_Form','Gender','Var1','Var2','Mobile_Verified','Source']  
  70. for col in var_to_encode:  
  71.     data[col] = le.fit_transform(data[col])  
  72.   
  73. #类别型的One-Hot 编码  
  74. data = pd.get_dummies(data, columns=var_to_encode)  
  75. data.columns#看看one-hot编码后的列是哪些  
  76. #区分训练和测试数据  
  77. train = data.loc[data['source']=='train']  
  78. test = data.loc[data['source']=='test']  
  79.   
  80. train.drop('source',axis=1,inplace=True)  
  81. #保存代码  
  82. train.to_csv('train_modified.csv',index=False)  
  83. test.to_csv('test_modified.csv',index=False