我遵循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 3,BUG: Fix default encoding for CSVFormatter.save
我在Python 3.6.4和Pandas 0.22.0上。我测试了MacOS和Windows上的行为是一致的。关于如何输出没有b前缀和单引号的列的任何建议?
答案 0 :(得分:2)
'' prefix表示Python 3 bytes literal,表示对象而不是unicode字符串。因此,如果要删除前缀,可以使用字符串解码方法解码bytes对象,然后再将其保存到csv文件中:
JPanel