我正试图将数据帧导出到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
之前将箱子从数组转换为列表。