将 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 从数组转换为列表。
我正在尝试将数据帧导出到 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 从数组转换为列表。