如何在Python中打开/转换CSV以使字符串不是unicode?

2024-04-26 04:13:06 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我想尽了一切办法,包括一些类似问题的答案。你知道吗

包括:

df = pd.read_csv('xxxx.csv', encoding = 'utf-8')那根本不管用。你知道吗

我还尝试过用astype(str)更改该列的数据类型,但也不起作用。你知道吗

然后我尝试定义一个转换函数来再次编码它:

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

但我希望他们都是有条件的。你知道吗

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


Tags: csvkey字符串convertdfforreadinput
3条回答

我认为您有一个问题,pandas将您的一些列推断为“object”类型,如果它找到至少一个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)

熊猫会根据列的内容自动为数据框中的列指定数据类型。如果您想改变这一点,您需要为每一列推断一种数据类型。为数据帧的每一列调用这行代码。你知道吗

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

在Python中,String数据类型等同于pandas中的object数据类型。你知道吗

对于包含浮点数的列,请调用以下代码:

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

此外,这里还有一个link,用于获取有关pandas中数据类型的其他信息。你知道吗

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

enter image description here

尝试:

df = pd.read_csv('xxxx.csv', dtype='str')

相关问题 更多 >