Pandas Dataframes.to_csv 截断长值

Jen*_*son 5 python dataframe pandas

问题:我正在尝试在 python 中使用 Pandas 数据帧存储大数据集。我的问题是,当我尝试将其保存到 csv 时,我的数据块被截断,如下所示:

e+12

[值1 值2 值3 。。。值1853 值1854]

说明: 我需要将大量数据存储到单个单元格中,并且我需要存储的一些值是长(时间)值,我创建了一个简短的脚本来显示我收到的错误:

dframe = pd.DataFrame()
arr = np.array([])
for x in range(1234567891230,1234567892230):
    arr = np.append(arr,x)
dframe['elements'] = [arr]
print(dframe['elements'][0][999])   # prints correct values, eg. 1234567892229.0
dframe.to_csv('temp.csv', index=False)
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,前 1000 个值的存储值如下所示(123456789 1230到 123456789 2230

1.23456789e+12

这完全忽略了四个最不重要的字符。如果将列表扩展到 1001 个值,更多值会被截断:

dframe = pd.DataFrame()
arr = np.array([])
for x in range(1234567891230,1234567892231):
    arr = np.append(arr,x)
dframe['elements'] = [arr]
print(dframe['elements'][0][999])   # still prints correct values, eg. 1234567892229.0
dframe.to_csv('temp.csv', index=False)
Run Code Online (Sandbox Code Playgroud)

完整的 csv 文件最终如下所示:

元素

“[1.23456789e+12 1.23456789e+12 1.23456789e+12 ... 1.23456789e+12 1.23456789e+12 1.23456789e+12]”

这几乎删除了所有 1000 个元素,并用...取代了它们。

有谁知道这些问题的解决方法或如何解决它们?

这不仅仅是为了显示而截断的问题(例如Pandas to_html() 截断字符串内容),而是实际上损坏了存储到 csv 的数据。

Jen*_*son 4

正如 @Jacob Tomlinson 所说,更改数据类型解决了一个问题,研究 numpys array2string 解决了另一个问题。

添加np.set_printoptions(threshold=np.nan)停止 to_csv 截断输出字符串。

dframe = pd.DataFrame()
arr = np.array([])
for x in range(1234567891230,1234567892230):
    arr = np.append(arr,x)
dframe['elements'] = [arr.astype('uint64')]
print(dframe['elements'][0][999])   # prints correct values, eg. 1234567892229.0

np.set_printoptions(threshold=np.nan)
dframe.to_csv('temp.csv', index=False)
Run Code Online (Sandbox Code Playgroud)