python - 在列上执行 .astype 'b' ) 时,Pandas to_csv 前缀 ('|S'

标签 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

对此问题的一些谷歌搜索确实发现了 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/

相关文章:

python - 如何过滤包含日期的字符串列表

python - 如何使用 python 的交互式输入运行命令行程序?

python - 如何在不对元素位置进行硬编码的情况下嵌套循环

python - pandas 过滤器系列与列表

python - 向数据框切片中的列添加前缀

python - 使用元类覆盖复杂内置方法

python - 使用 matplotlib 从 CSV 文件中绘制数据

python - Pandas-根据重复行更新特定列中的值

python - 如何在特定 "start"和 "stop"标记之间的位置填充 pandas 系列中的值?

python - 按两个标准分组的直方图 [python]