2017-06-10 122 views
0

我有一个包含3列的数据集。在代码的第1行中,我用空值替换了'%'。在第2行中,我将international_students列字符串值转换为float。将数据集从字符串转换为浮点数错误

一切都好,如果我运行一次代码。但是,如果我运行代码两次,则会出现错误:“只能使用.str访问器和字符串值,它们在pandas中使用np.object_ dtype”。 我认为这是因为该列已经变成了一个浮动。

如何编写代码以便我可以多次运行而不会出现错误?

df = pd.DataFrame({'university': ['harvard', 'cambridge', 'GT'], 
       'international_students': ['28%', '33%', '55%'], 
       index=['0', '1', '2']}) 

[line1]: df['international_students'] = df['international_students'].str.replace('%', '') 
[line2]: df['international_students'] = df['international_students'].astype(np.float) 

回答

1

运行一次代码后,你已经转换的值np.float其实如此再次运行str.replace肯定会为失败,如预期。

如果您想多次执行这些操作,我建议您使用df.copy()创建数据的副本。

original_df = pd.DataFrame({'university': ['harvard', 'cambridge', 'GT'], 
       'international_students': ['28%', '33%', '55%']}, 
       index=['0', '1', '2']) 

# use this copy for your operations involving using the international_student field 
# as floats 
odf_cp1 = original_df.copy() 
odf_cp1['international_students'] = odf_cp1['international_students'].str.replace('%', '') 
odf_cp1['international_students'] = odf_cp1['international_students'].astype(np.float) 
+0

谢谢Onel。现在我明白了。感谢您的帮助。 –

+0

不客气。由于这解决了您的问题,请继续并将其标记为答案。 –