使用pandas执行to_hdf时出现错误信息"异常:无法找到正确的原子类型"

3
我要将数据帧df保存到.h5文件MainDataFile.h5中:
df.to_hdf ("c:/Temp/MainDataFile.h5", "MainData", mode = "w", format = "table", data_columns=['_FirstDayOfPeriod','Category','ChannelId'])

并收到以下错误信息:

*** 异常:无法找到正确的原子类型 -> > [dtype->object,items->Index(['Libellé_Article', 'Libellé_segment'], dtype='object')]

现在,如果我从df中删除字符串列“Libellé_Article”,则不再收到错误消息。

这一列可能有什么问题?我怀疑其中有一个特殊的、被禁止的字符,但是迄今为止还没有找到。

更新1

根据Jeff的评论,我尝试对“Libellé_Article”列进行编码:

df['Libellé_Article'] = df['Libellé_Article'].str.encode('utf-8')

该列现在的显示如下:
df['Libellé_Article']
0                                               b'PAPETERIE'
2                                    b'NR CONTRIBUTION DEEE'
4                                         b'NON UTILISE 103'
7                         b"L'ENFANT SOUS TERREUR/MILLER A."
10                 b'ENERGIE VITALE ET AUTOGUERISON/CHIA M.'
12         b'ENERGIE COSMIQUE CETTE PUISSANCE QUI EST EN ...
13         b'ENERGIE COSMIQUE CETTE PUISSANCE QUI EST EN ...
18                     b"COMMENT ATTIRER L'ARGENT/MURPHY J."
19                     b"COMMENT ATTIRER L'ARGENT/MURPHY J."

当我执行to_hdf命令时,我遇到了以下错误:

*** TypeError: 无法序列化 [Libellé_Article] 列,因为它的数据内容是混合对象dtype


转换是否因为Unicode出现问题了?你尝试使用[u'Libellé_Article', u'Libellé_segment']了吗?我知道这是Python 3,但仍然... - Ivan
我刚刚尝试了一下,但结果不幸相同。 - Georges Casamatta
1个回答

1

这将适用于py2。对于py3,这应该可以在没有编码步骤的情况下工作。 实际上,这是一个“混合”列,因为它包括字符串和Unicode。

In [24]: from pandas.compat import u

In [25]: df = DataFrame({'unicode':[u('\u03c3')] * 5 + list('abc') })

In [26]: df
Out[26]: 
  unicode
0       ?
1       ?
2       ?
3       ?
4       ?
5       a
6       b
7       c

In [27]: df['unicode'] = df.unicode.str.encode('utf-8')

In [28]: df.to_hdf('test.h5','df',mode='w',data_columns=['unicode'],format='table')

In [29]: pd.read_hdf('test.h5','df')
Out[29]: 
  unicode
0       ?
1       ?
2       ?
3       ?
4       ?
5       a
6       b
7       c

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接