我有一个对象的字典。
data = [{'a': 'qwerty', 'b': 123}]
我创建了一个数据框:
df = pd.DataFrame(data)
现在我想坚持下去:
df.to_hdf(filename, 'book', table=True, mode='a', append=True)
现在我想要保留另一批稍长的数据:
data = [{'a': 'qwerty2', 'b': 123}]
df = pd.DataFrame(data)
df.to_hdf(filename, 'book', table=True, mode='a', append=True)
失败并出现错误:
ValueError: Trying to store a string with len [7] in [values_block_2] column but
this column has a limit of [6]!
Consider using min_itemsize to preset the sizes on these columns
它基本上只有当我保持列的大小相同但是如果它不同时我才会得到上面的错误。如何让pandas适用于任何大小的字符串?
答案 0 :(得分:4)
最后,我找到了自己问题的答案。问题是,当我第一次进行to_hdf
批处理时,它会根据数组中提供的数据自动创建一个模式,但是如果下一批行包含超过此列大小限制的数据,则在第一批中创建的数据然后它会崩溃并出现错误:ValueError: Trying to store a string with len
因此,解决方案是将min_itemsize
参数添加到to_hdf
:
df.to_hdf(filename, 'book', table=True, mode='a', append=True, min_itemsize={'a': 7})
换句话说,您可以将hdf视为简单的SQL表,您需要为每个String列预定义大小。
或者,您需要将数据写入新文件。