首页 > 解决方案 > 如何在 Python 中打开/转换 CSV,使字符串不是 unicode?

问题描述

我有一个包含各种数字和字符串列的 CSV 文件。当我用它打开它时,pandas.read_csv它总是给我 unicode。有什么方法可以将数据帧转换为非 unicode 或将它们转换为字符串(并将浮点单元格保持为浮点数)?

我已经尝试了所有我能想到的方法,包括一些类似 Stackoverflow 问题的答案。

包含:

df = pd.read_csv('xxxx.csv', encoding = 'utf-8')那根本行不通。

我也尝试过用astype(str) That didn't work 更改该列的 dtype。

然后我尝试定义一个转换函数来再次对其进行编码:

def convert(input):
    if isinstance(input, dict):
        return {convert(key): convert(value) for key, value in 
input.iteritems()}
    elif isinstance(input, list):
        return [convert(element) for element in input]
    elif isinstance(input, unicode):
        return input.encode('utf-8')
    else:
        return input

 df = convert(df)

当我打电话时df.index.unique(),它总是显示:

Index([u'row_a', u'row_b', u'row_c'], dtype='object', name=u'column_a')

但我希望它们都在字符串中。

有什么建议吗?非常感谢!

标签: pythonpandaspython-2.7csvunicode

解决方案


我认为您的问题是 pandas 将您的某些列推断为“对象”类型,如果它发现至少一个 unicode 对象,它将推断为 unicode。要解决它,您应该使用检查哪些列是 unicode:

In [1] df.dtypes

Out[1]: 
column1         unicode
column2         unicode
column3         unicode

然后获取类型:

types = df.apply(lambda x: pd.lib.infer_dtype(x.values))

并将它们转换为字符串:

for col in types[types=='unicode'].index:
    df[col] = df[col].astype(str)

推荐阅读