将 pandas 数据帧导出到 csv 时行被截断

Line truncates when exporting pandas dataframe to csv

我正在尝试将数据帧导出到 csv 文件,以便稍后上传到 SAS,但是其中一行被截断,即使它没有达到 32k 字符的 csv 单元格限制。下面的代码演示了这个问题

import pandas as pd
import numpy as np

bin1 = np.array(['finance'])
bin2 = np.array(['other', 'metallurgy', 'car trade/manuf', 'real_estate', 'transport', 'construction'])
bin3 = np.array(['trade whl', 'trade ret', 'tourism', 'food'])

data = {'var':'emp_sector','bin':[bin1,bin2,bin3]}
df = pd.DataFrame(data)
print(df)


          var                                                bin
0  emp_sector                                          [finance]
1  emp_sector  [other, metallurgy, car trade/manuf, real_esta...
2  emp_sector              [trade whl, trade ret, tourism, food]

path = 'Y:/path/test.csv'
df.to_csv(path, encoding='ANSI')

导出 df 后,我打开 csv 文件并看到:

,var,bin
0,emp_sector,['finance']
1,emp_sector,"['other' 'metallurgy' 'car trade/manuf' 'real_estate' 'transport'
 'construction']"
2,emp_sector,['trade whl' 'trade ret' 'tourism' 'food']

出于某种原因 'construction' 被移至下一行。导出到 .txt 得到相同的结果。

有人可以帮忙吗?

我想我找到了罪魁祸首。如果我们查看数组的字符串表示形式,就会出现问题:

>>> bin3.__str__()
"['trade whl' 'trade ret' 'tourism' 'food']"

>>> bin2.__str__()
"['other' 'metallurgy' 'car trade/manuf' 'real_estate' 'transport'\n 'construction']"

我们在 bin2.__str__() 的输出中看到一个换行符 (\n),这可以解释为什么 to_csv 在其输出中添加一个换行符。

我发现如果我们首先转换为列表,换行符就会消失:

>>> bin2.tolist().__str__()
"['other', 'metallurgy', 'car trade/manuf', 'real_estate', 'transport', 'construction']"

所以一个解决方案是在调用 to_csv 之前将 bins 从数组转换为列表。