将pandas数据帧写入CSV fi

2024-04-24 20:29:02 发布

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

我有一个熊猫数据框,我想写一个CSV文件。我用的是:

df.to_csv('out.csv')

得到错误:

UnicodeEncodeError: 'ascii' codec can't encode character u'\u03b1' in position 20: ordinal not in range(128)

有没有什么方法可以轻松地解决这个问题(例如,我的数据帧中有unicode字符)?有没有一种方法可以写入制表符分隔的文件,而不是使用CSV,例如“to tab”方法(我认为不存在这种方法)?


Tags: 文件csvto数据方法indf错误
3条回答

当您使用to_csv方法将DataFrame对象存储到csv文件中时,您可能不需要存储DataFrame对象的每个行的前面的索引。

通过将False布尔值传递给index参数,可以避免这种情况。

有点像:

df.to_csv(file_name, encoding='utf-8', index=False)

因此,如果DataFrame对象类似于:

  Color  Number
0   red     22
1  blue     10

csv文件将存储:

Color,Number
red,22
blue,10

而不是(通过默认值True时的情况)

,Color,Number
0,red,22
1,blue,10

要用制表符分隔,可以使用^{}sep参数:

df.to_csv(file_name, sep='\t')

要使用特定编码(例如“utf-8”),请使用encoding参数:

df.to_csv(file_name, sep='\t', encoding='utf-8')

如果您在编码到“utf-8”时遇到问题,并且希望逐个单元格执行操作,则可以尝试执行以下操作。

Python 2

(其中“df”是数据帧对象。)

for column in df.columns:
    for idx in df[column].index:
        x = df.get_value(idx,column)
        try:
            x = unicode(x.encode('utf-8','ignore'),errors ='ignore') if type(x) == unicode else unicode(str(x),errors='ignore')
            df.set_value(idx,column,x)
        except Exception:
            print 'encoding error: {0} {1}'.format(idx,column)
            df.set_value(idx,column,'')
            continue

然后尝试:

df.to_csv(file_name)

可以通过以下方式检查列的编码:

for column in df.columns:
    print '{0} {1}'.format(str(type(df[column][0])),str(column))

警告:errors=“ignore”只会忽略字符,例如

IN: unicode('Regenexx\xae',errors='ignore')
OUT: u'Regenexx'

Python 3

for column in df.columns:
    for idx in df[column].index:
        x = df.get_value(idx,column)
        try:
            x = x if type(x) == str else str(x).encode('utf-8','ignore').decode('utf-8','ignore')
            df.set_value(idx,column,x)
        except Exception:
            print('encoding error: {0} {1}'.format(idx,column))
            df.set_value(idx,column,'')
            continue

相关问题 更多 >