【发布时间】:2014-09-04 13:53:08
【问题描述】:
您有一个数据框 (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)
感觉就像我陷入了“先有鸡还是先有蛋”的困境。
【问题讨论】:
-
你能把你用来阅读电子表格的那一行写进去吗?
-
你不能只打电话给
dropna或者你想用一些值替换NaN吗? -
@chrisaycock:我添加了用于阅读电子表格的行。
-
@EdChum:如果我 dropna,我假设 Pandas 仍然将该列视为浮点数。我仍然无法将其转换为字符串类型,因为它包含 unicode。
-
我和你不一样,我的是
object,这是一个string,我不明白你怎么会有这样的dtype。仍然在删除 NaN 之后,您应该可以使用astype(float)进行投射
标签: python unicode pandas ipython