问题::我正在尝试使用python中的Pandas数据框存储大型数据集。我的麻烦是,当我尝试将其保存到csv时,我的数据块将被截断,例如:
e + 12
和
[值1值2值3 。 。 。 value1853 value1854]
说明: 我需要将大量数据存储到单个单元格中,并且需要存储的某些值是Long(时间)值,并且我创建了一个简短的脚本来显示我遇到的错误:
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)
在上面的示例中,对于前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)
完整的csv文件最终如下所示:
元素
“ [1.23456789e + 12 1.23456789e + 12 1.23456789e + 12 ... 1.23456789e + 12 1.23456789e + 12 1.23456789e + 12]“
几乎删除了全部1000个元素,并用 ... 替换了它们。
有人知道这些问题的解决方法或解决方法吗?
这不仅仅是为了显示而被截断的问题(例如Pandas to_html() truncates string contents),而是实际上破坏了存储到csv的数据。
答案 0 :(得分:1)
尝试将numpy数组的dtype
设置为整数。
dframe = pd.DataFrame()
arr = np.array([], dtype='int16')
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)
元素
"[1234567891230 1234567891231 1234567891232 ... 1234567891233 1234567891234]"
答案 1 :(得分:1)
将数据类型更改为@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)
答案 2 :(得分:0)
因此,将代码复制到我的机器上,我看到的是四舍五入,但列表没有被截断。
我不知道最佳的解决方案,但这是一些建议
您是否需要人类可读的驱动器上的文件? 以后会用什么系统读取?
""
中,则可以使用那里的任何工具轻松地将其拆包