Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫-附加';表';使用不同数据类型格式化为HDF5Store:[values\u axes]的组合无效_Python_Pandas_Append_Store_Hdf5 - Fatal编程技术网

Python 熊猫-附加';表';使用不同数据类型格式化为HDF5Store:[values\u axes]的组合无效

Python 熊猫-附加';表';使用不同数据类型格式化为HDF5Store:[values\u axes]的组合无效,python,pandas,append,store,hdf5,Python,Pandas,Append,Store,Hdf5,我最近开始尝试在python pandas中使用HDF5格式来存储数据,但遇到了一个无法找到解决方法的问题。在使用CSV文件之前,我在添加新数据方面没有遇到任何问题 这就是我所尝试的: store = pd.HDFStore('cdw.h5') frame.to_hdf('cdw.h5','cdw/data_cleaned', format='table',append=True, data_columns=True,dropna=False) 它抛出: ValueError: invalid

我最近开始尝试在python pandas中使用HDF5格式来存储数据,但遇到了一个无法找到解决方法的问题。在使用CSV文件之前,我在添加新数据方面没有遇到任何问题

这就是我所尝试的:

store = pd.HDFStore('cdw.h5')
frame.to_hdf('cdw.h5','cdw/data_cleaned', format='table',append=True, data_columns=True,dropna=False)
它抛出:

ValueError: invalid combinate of [values_axes] on appending data [name->Ordereingangsdatum,cname->Ordereingangsdatum,dtype->float64,kind->float,shape->(1, 176345)] vs current table [name->Ordereingangsdatum,cname->Ordereingangsdatum,dtype->bytes128,kind->string,shape->None]
我明白了,它告诉我我想为一个列附加不同的数据类型,但让我感到困惑的是,我以前写过同一个CSV文件,还有其他一些CSV文件,从一个数据帧到那个HDF5文件

我在做货运行业的分析,那里的数据非常不一致——通常是列中缺少值或混合数据类型或其他“数据污点”

我在寻找一种方法,将数据附加到HDF5文件中,无论列中有什么内容,只要列名称相同

强制在HDF存储中添加数据,而不依赖于数据类型,或者为我的问题提供另一个简单的解决方案,这将是一件非常美妙的事情。我们的目标是在以后的分析中实现自动化,因此我不希望每次在总共62列中的一列中缺少值时都更改数据类型

我的另一个问题是:

我对
read_hdf
的文件访问比我的
read_csv
要花费更多的时间。我有大约150万行62列。这是因为我没有SSD驱动器吗?因为我读到
read\u hdf
的文件访问应该更快

我问自己,我是更喜欢CSV文件还是HDF5


非常感谢您的帮助。

对于那些在数据类型不总是相同的情况下追加数据时遇到同样问题的人,我终于找到了解决方案。首先使用
li=list(frame)将每列转换为对象
帧[li]=帧[li].aType(对象)
frame.info()
然后尝试方法
df.to\u hdf(key,value,append=True)
并等待其错误消息。错误消息
TypeError:无法序列化列[not_one_datatype],因为它的数据内容是[mixed]object dtype
将告诉它仍然不喜欢的列。将这些列转换为float对我来说很有用!在此之后,错误将使用
df['not_one_datatype']转换所提到的列。astype(float)
仅当您确定此列中永远不会出现float时使用
integer
,否则append方法将再次出现错误

我决定与CSV和HDF5文件并行工作。如果我遇到HDF5的问题,我没有解决方法,我会简单地更改为CSV-这是我个人可以推荐的

更新:好的,在考虑HDF API时,这种格式的创建者似乎没有考虑到现实情况:
HDF5 min\u itemsize错误:ValueError:试图将len[##]的字符串存储在[y]列中,但此列的限制为[###]

现在的笑话是,这个API的创建者希望我在第一次写入时知道列中每个可能数据的最大列长度?真正地另一个不一致之处是
df.to_hdf(append=True)
没有参数
min\u itemsize={'column1':1000}
。这种格式最适合于仅存储自创数据,但绝对不适合于数据类型和每列中条目的长度不是一成不变的数据。当您想要独立于Python中顽固的HDF5API从pandas数据帧中追加数据时,唯一剩下的解决方案是在追加一行之前插入每个数据帧,该行包含非常长的字符串(数字列除外)。只是为了确保您始终能够附加数据,无论它可能会持续多长时间

当执行此写入过程时,保存庞大的HDF5文件将需要花费大量的时间和巨大的磁盘驱动器


CSV在性能、集成度,尤其是可用性方面,肯定会战胜HDF5。对于那些在数据类型不总是相同的情况下追加数据时遇到同样问题的人来说,好吧:我终于找到了一个解决方案。首先使用
li=list(frame)将每列转换为对象
帧[li]=帧[li].aType(对象)
frame.info()
然后尝试方法
df.to\u hdf(key,value,append=True)
并等待其错误消息。错误消息
TypeError:无法序列化列[not_one_datatype],因为它的数据内容是[mixed]object dtype
将告诉它仍然不喜欢的列。将这些列转换为float对我来说很有用!在此之后,错误将使用
df['not_one_datatype']转换所提到的列。astype(float)
仅当您确定此列中永远不会出现float时使用
integer
,否则append方法将再次出现错误

我决定与CSV和HDF5文件并行工作。如果我遇到HDF5的问题,我没有解决方法,我会简单地更改为CSV-这是我个人可以推荐的

更新:好的,在考虑HDF API时,这种格式的创建者似乎没有考虑到现实情况:
HDF5 min\u itemsize错误:ValueError:试图将len[##]的字符串存储在[y]列中,但此列的限制为[###]

现在的笑话是,这个API的创建者希望我在第一次写入时知道列中每个可能数据的最大列长度?真正地另一个不一致之处是
df.to_hdf(append=True)
没有参数
min\u itemsize={'column1':1000}
。这种格式最适合于仅存储自创数据,但绝对不适用于数据类型和长度不同的数据