如果 pandas .to_csv 包含超过 32,767 个字符,它是不是可以正确导出单元格(没有数据丢失)?

Posted

技术标签:

【中文标题】如果 pandas .to_csv 包含超过 32,767 个字符,它是不是可以正确导出单元格(没有数据丢失)?【英文标题】:Does pandas .to_csv export cells properly (with no data loss) if it contains more than 32,767 characters?如果 pandas .to_csv 包含超过 32,767 个字符,它是否可以正确导出单元格(没有数据丢失)? 【发布时间】:2019-12-16 07:33:37 【问题描述】:

在我说什么之前,请注意,我必须使用 xlsx 或 csv,因为它用于网站导入,并且单元格中的信息不能以任何方式截断、删除或缩短。请不要提供说要使用其他东西的答案,因为我不能。

我正在将数据导出到可以是 csv 或 xlsx 的电子表格,具体取决于我对这个问题的答案,并且超过 10000 行包含一个包含超过 32,767 个字符的单元格。 (所以总字符数为 32767+ * 10000)。例如:(89473 个字符 * 10000)

我不确定信息在完成导出后是否会保留,因为在 Excel 中,对于 xlsx 或对于 csv 导出,它会剪切(删除)单元格中 32,767 个字符的数据,它会将信息放入到下一行并使其看起来已损坏(即使它可能不是)。

我的主要问题是:从 pandas 导出后是否保留了信息,只是没有在 excel 中显示信息,而是原始文件包含该信息?还是不管怎样,出口后一切都被切断了?

另外,有没有办法使用不同的程序查看单元格中的全部字符,因为很明显,Excel 会将其截断或使其看起来失真。

我曾尝试在网上寻找解决方案,但没有成功。我可以使用这些其他格式(除了 csv 和 xlsx)来导入网站:XLS、XML 或 ZIP 文件。

df.to_excel('File.xlsx') ##Using this to export the file.

【问题讨论】:

【参考方案1】:

编辑:谷歌上的 10 秒告诉我Excel has a hard limit of 32767 characters per cell。所以这是excel的问题。

好吧,让我们做一个测试数据框:

import pandas as pd
bigstring = "".join(["ABCDEFGHIJKLMNOPQRSTUVWXYZ"] * 10000)
df = pd.DataFrame([bigstring, bigstring[:-1], bigstring[:-2]])

目前看起来不错

>>> list(map(len, df[0]))
[260000, 259999, 259998]
df.to_csv("test.csv")

现在让我们看看它是否有效:

wc -l test.csv 
4 test.csv

4 行,没错。

awk ' print length ' test.csv 
2
260002
260001
260000

每行的长度也很好。

cat test.csv | grep -o '...$'
XYZ
WXY
VWX

是的,看起来不错。所以我无法复制你的问题。

【讨论】:

这应该是公认的答案。当某些句子被“截断”时,我在 Excel 中注释生成的数据。以为是数据生成的时候出了问题,其实只是Excel的显示限制。

以上是关于如果 pandas .to_csv 包含超过 32,767 个字符,它是不是可以正确导出单元格(没有数据丢失)?的主要内容,如果未能解决你的问题,请参考以下文章

Pandas - 使用 to_csv 编写多索引行

Pandas DataFrame.to_csv 引发 IOError:没有这样的文件或目录

pandas的to_csv()使用细节和一些参数

Python pandas 带有 to_csv 的大浮点数

使用 pandas.DataFrame.to_csv() 按列输出不同的精度?

pandas.DataFrame.to_csv:按列选择性地应用 date_format