pandas.DataFrame写入hdf5时出现的错误

在将df写入hdf5的时候遇到的错误,调了很长时间。这里记录一下。如果大神们能帮忙找一下原因就更好了。

问题描述:

在将df写入hdf5时遇到错误。代码如下:

store = pd.HDFStore(self.path+filename,mode="w")#mode缺省值为'a',table模式下不会替换没有写入的键,而w重建
        for k in self.loaded_list[filename].keys():
            store.put(k,self.loaded_list[filename][k],format='table',encoding='utf8',data_columns=True)
            #这里加入data_columns=True,这样以后在select时才能使用列名作为条件
        store.close()

结果是:

Traceback (most recent call last):
  File "/home/zhangyl/.vscode/extensions/ms-python.python-2020.6.91350/pythonFiles/ptvsd_launcher.py", line 48, in <module>
    main(ptvsdArgs)
  File "/home/zhangyl/.vscode/extensions/ms-python.python-2020.6.91350/pythonFiles/lib/python/old_ptvsd/ptvsd/__main__.py", line 432, in main
    run()
  File "/home/zhangyl/.vscode/extensions/ms-python.python-2020.6.91350/pythonFiles/lib/python/old_ptvsd/ptvsd/__main__.py", line 316, in run_file
    runpy.run_path(target, run_name='__main__')
  File "/home/zhangyl/anaconda3/envs/zz-tensorflow-gpu/lib/python3.7/runpy.py", line 263, in run_path
    pkg_name=pkg_name, script_name=fname)
  File "/home/zhangyl/anaconda3/envs/zz-tensorflow-gpu/lib/python3.7/runpy.py", line 96, in _run_module_code
    mod_name, mod_spec, pkg_name, script_name)
  File "/home/zhangyl/anaconda3/envs/zz-tensorflow-gpu/lib/python3.7/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/home/zhangyl/stock/Octupussy/stockdata.py", line 1431, in <module>
    sd.fillfile(filename)
  File "/home/zhangyl/stock/Octupussy/stockdata.py", line 1417, in fillfile
    self.savedata(data_type,interval,adj)
  File "/home/zhangyl/stock/Octupussy/stockdata.py", line 589, in savedata
    store.put(k,self.loaded_list[filename][k],format='table',encoding='utf8',data_columns=True)
  File "/home/zhangyl/anaconda3/envs/zz-tensorflow-gpu/lib/python3.7/site-packages/pandas/io/pytables.py", line 1042, in put
    errors=errors,
  File "/home/zhangyl/anaconda3/envs/zz-tensorflow-gpu/lib/python3.7/site-packages/pandas/io/pytables.py", line 1709, in _write_to_group
    data_columns=data_columns,
  File "/home/zhangyl/anaconda3/envs/zz-tensorflow-gpu/lib/python3.7/site-packages/pandas/io/pytables.py", line 4143, in write
    data_columns=data_columns,
  File "/home/zhangyl/anaconda3/envs/zz-tensorflow-gpu/lib/python3.7/site-packages/pandas/io/pytables.py", line 3813, in _create_axes
    errors=self.errors,
  File "/home/zhangyl/anaconda3/envs/zz-tensorflow-gpu/lib/python3.7/site-packages/pandas/io/pytables.py", line 4800, in _maybe_convert_for_string_atom
    for i in range(len(block.shape[0])):
TypeError: object of type 'int' has no len()

问题在于程序中其它数据的写入也调用这个代码没有问题。而这段代码不行。
这段代码是使用df.append生成的:如下:

df = self.init_df() #生成一个columns具备的空df
for t in tl:
	df.append({'a':111,'b',222},ignor_index=True)
	i = len(df)-1
	df.loc[i,'c'] = dd['c'].max() + t
	...
return df

生成的df可以print出来,但就是写不进hdf5文件。
调整后的代码如下:

df = self.init_df() #生成一个columns具备的空df
for t in tl:
	a = {'a':111,'b':222}
	i = len(df)-1
	a['c'] = dd['c'].max() + t
	...
	df.append(a,ignor_index=True)
return df

调整后的代码显示和前面是一模一样的,但是可以写入hdf5文件。

补充20201205

问题再次出现了,不是在这个地方,但是报错一样一样的。
关键是不是每次都发生,痛苦地找了两天,终于定位了问题点。
仍然找不清问题出现的机理,但是肯定和dataframe中的NaN有关。出现问题的dataframe的同一列下有NaN也有None。
所以解决方案是:

df.fillna(valuereplacenan,inplace=True

刹那间,雨过天晴。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值