如何打开/ Python中转换CSV这样的字符串不是Unicode?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何打开/ Python中转换CSV这样的字符串不是Unicode?相关的知识,希望对你有一定的参考价值。

我有数字和字符串的各列的CSV文件。当我与pandas.read_csv打开它,它总是给我的Unicode。什么办法可以让数据帧转换为非Unicode或将其转换为字符串(并保持浮动细胞作为浮动)?

我试着从字面上一切办法我能想到的,包括类似的问题#2一些答案。

包含:

df = pd.read_csv('xxxx.csv', encoding = 'utf-8')这并没有在所有的工作。

我也试图改变与astype(str)该列没有任何工作的D型。

然后我试图定义一个转换功能,再次对其进行编码:

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')

但我希望他们全部字符串。

任何建议?非常感谢你!

答案

尝试:

df = pd.read_csv('xxxx.csv', dtype='str')
另一答案

我觉得你有大熊猫被infering你的一些列的“对象”类型的问题,如果它发现至少有一个统一的对象就会推断它为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)
另一答案

大熊猫自动分配一个数据类型到基于列的内容数据中的帧的列。如果你想改变这种状况,就需要推断数据类型为每一列。调用这行代码为您的数据帧的每一列。

df["column_name"] = df['column_name'].astype('object')

在Python,字符串数据类型等效于大熊猫“对象”的数据类型。

为了您的列包含浮动,请拨打以下代码:

df["column_name"] = df['column_name'].astype('float64')

另外,这里是对大熊猫的数据类型的附加信息link

您也可以通过调用df.dtypes检查所有列的数据类型

enter image description here

以上是关于如何打开/ Python中转换CSV这样的字符串不是Unicode?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中转换、排序和保存到 CSV MS Access 数据库 .mdb 文件

如何在读取 CSV 文件时将字符串值转换为整数值?

python-import带有十进制值的csv

在熊猫中如何将符号转换为整数?

如何在 Python 中为 csv.reader 设置语言环境?

如何将 csv 文件转换为 python 中的列表列表