DataFrame性能警告

时间:2018-04-07 23:54:38

标签: python python-3.x pandas hdf5 pytables

我正在收到熊猫的表现警告

/usr/local/lib/python3.4/dist-packages/pandas/core/generic.py:1471: 
PerformanceWarning: 
your performance may suffer as PyTables will pickle object types that it cannot
map directly to c-types [inferred_type->mixed-integer,key->block0_values] [items->['int', 'str']]

我在这里阅读了关于github和问题的几个问题,并且所有人都说这是因为我在一列中混合了类型,但我明确没有。简单的例子如下:

import pandas as pd
df = pd.DataFrame(columns=['int', 'str'])
df = df.append({ 'int': 0, 'str': '0'}, ignore_index=True)
df = df.append({ 'int': 1, 'str': '1'}, ignore_index=True)
for _, row in df.iterrows():
   print(type(row['int']), type(row['str']))

# <class 'int'> <class 'str'>
# <class 'int'> <class 'str'>

# however
df.dtypes
# int    object
# str    object
# dtype: object

# the following causes the warning
df.to_hdf('table.h5', 'table')

这可以是什么,我该怎么办?

1 个答案:

答案 0 :(得分:2)

您需要在适当的时候将数据框系列转换为数字类型。

有两种主要方法可以实现整数:

# Method 1
df['col'] = df['col'].astype(int)

# Method 2
df['col'] = pd.to_numeric(df['col'], downcast='integer')

这可确保数据类型适当地映射到C类型,从而使数据能够以HDF5格式(PyTables使用)存储,而无需进行酸洗。