行在导出pandas数据框为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之前将箱子从数组转换为列表。

相关内容

  • 没有找到相关文章

最新更新