将字符串转换为

时间:2015-08-06 16:08:16

标签: python csv pandas machine-learning scikit-learn

尝试对医疗数据执行简单的线性分类。样本数据由所有字符串组成,大多数值都在' yes',' no'格式,我希望这些数据转换为整数值1& 0这样我就可以做一些统计分析了。

以下是我的代码

import pandas as pd
from sklearn.cross_validation import train_test_split
from sklearn import preprocessing

df = pd.read_csv('sample-data.csv',encoding='utf-16', header=None, sep=',',names=['Temp','Occurrence','Lumbar-pain','Urine-pushing','Micturition-pains','Burning-of-urethra-swelling-of-urethra-outlet','Outcome1-Urinary-bladder','Outcome2-Nephritis-of-renal'])

Click here to view Sample-data.csv

我尝试将csv数据移动到数据框后进行转换,尝试使用map()对特定列进行转换,但我希望对值为“是”的所有列都进行此操作,',& #39;无'字符串。 是否有任何一揽子方法可以直接转换所有' yes'' no'运行read_csv

时,字符串为整数1和0
d = {'yes': 1, 'no': 0}
print df['Outcome1-Urinary-bladder'].map(d) 

查看this solution,但它不适合我的要求。

请帮助我,提前致谢。

2 个答案:

答案 0 :(得分:11)

您可以使用.replace方法。

df = pd.DataFrame(np.random.choice(['yes', 'no'], size=(5,3)), columns=list('ABC'))
df

     A    B    C
0   no  yes   no
1   no  yes  yes
2  yes  yes   no
3  yes   no   no
4  yes  yes  yes


df.replace(['yes', 'no'], [1, 0])

   A  B  C
0  0  1  0
1  0  1  1
2  1  1  0
3  1  0  0
4  1  1  1

替代地

pd.DataFrame(np.where(df=='yes', 1, 0), columns=df.columns, index=df.index)

是矢量化numpy方法,比元素映射快得多。

答案 1 :(得分:0)

还有另一种选择,你可以使用sklearn imputer。要处理空值,以后可以使用pandas的get_dummy()方法

  

Scountry_imputer = preprocessing.Imputer(missing_values ='NaN',   strategy ='mean',axis = 0)

     

Data = pd.get_dummies(df ['column_name'])