熊猫to_csv前缀' b'在列上执行.astype(' | S')时

时间:2018-02-02 14:54:26

标签: python pandas

我遵循this article的建议来减少Pandas DataFrame内存使用量,我在对象列上使用.astype('|S'),如下所示:

data_frame['COLUMN1'] = data_frame['COLUMN1'].astype('|S')
data_frame['COLUMN2'] = data_frame['COLUMN2'].astype('|S')

在DataFrame上执行此操作可将内存使用量减少20-40%,而不会对处理列产生负面影响。但是,使用.to_csv()输出文件时:

data_frame.to_csv(filename, sep='\t', encoding='utf-8')

带有.astype('|S')的列的前缀为b,带有单引号:

b'00001234'  b'Source'

删除.astype('|S')调用并输出到csv会产生预期的行为:

00001234  Source

关于此问题的一些Google搜索确实发现了GitHub问题,但我认为它们并不相关(看起来它们也已修复):to_csv and bytes on Python 3BUG: Fix default encoding for CSVFormatter.save

我在Python 3.6.4和Pandas 0.22.0上。我测试了MacOS和Windows上的行为是一致的。关于如何输出没有b前缀和单引号的列的任何建议?

1 个答案:

答案 0 :(得分:2)

'' prefix表示Python 3 bytes literal,表示对象而不是unicode字符串。因此,如果要删除前缀,可以使用字符串解码方法解码bytes对象,然后再将其保存到csv文件中:

JPanel