Python将Pandas Float转换为String

时间:2014-09-04 13:53:08

标签: python unicode pandas ipython

您有一个数据框(df),其中包含两列(日期,文本),这些列正在从Excel电子表格中读取到Python / Pandas中。

xl = pd.ExcelFile(dir+"file.xlsx")
df = xl.parse(xl.sheet_names[0])

    date        text                
0   2013-08-06  NaN                 
1   2013-08-06  Text with unicode
2   ...

该文本包含我通常使用

删除的不需要的unicode字符
df['text'] = df['text'].apply(lambda sentence: ''.join(word for word in sentence if ord(word) < 128))

但是,由于第一行中的文本包含“NaN”,看起来Pandas将该列键入为“float”,并且上述命令失败,因为它只对字符串进行操作。我找不到将类型重新分配为字符串的方法,因为它包含unicode字符:

df['text'] = df['text'].astype(str)   

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-12: ordinal not in range(128) 

感觉我正陷入“鸡或鸡蛋”的困境。

1 个答案:

答案 0 :(得分:1)

不是你的整个列都被称为浮点数 - 否则它根本就无法保存字符串。它只是导致您的方法抛出异常的NaN值。

所以你必须处理NaN - 你希望你的代码如何转换NaN?到'NaN'

这种方式比NaN更具特殊价值。如果您不想要NaN值,则可以使用dropna。如果您想要一些其他值(或字符串值) - 您可以使用.fillna('NaN')。如果你想保留NaN以备将来使用(这似乎是我的方式) - 只需在你的lambda上有一个特殊的情况,这将使它们成为NaN:

from pandas import isnull
lambda sentence: sentence if isnull(sentence) else \
                          ''.join(word for word in sentence if ord(word) < 128)