我正在遵循 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
对此问题的一些谷歌搜索确实发现了 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 前缀和单引号的列有什么建议吗?
最佳答案
“b”前缀表示 Python 3 字节 literal它代表一个对象而不是一个 unicode 字符串。因此,如果您想删除前缀,可以在将字节对象保存到 csv 文件之前使用字符串解码方法对其进行解码:
data_frame['COLUMN1'] = data_frame['COLUMN1'].apply(lambda s: s.decode('utf-8'))
关于python - 在列上执行 .astype 'b' ) 时,Pandas to_csv 前缀 ('|S',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48585263/