【发布时间】:2014-05-24 19:09:49
【问题描述】:
我有一个 pandas DataFrame myDF 有几个字符串列(其 dtype 是 object)和许多数字列。我尝试了以下方法:
d=pandas.HDFStore("C:\\PF\\Temp.h5")
d['test']=myDF
我得到了这个结果:
C:\PF\WinPython-64bit-3.3.3.3\python-3.3.3.amd64\lib\site-packages\pandas\io\pytables.py:2446: PerformanceWarning:
your performance may suffer as PyTables will pickle object types that it cannot
map directly to c-types [inferred_type->mixed,key->block2_values]
[items->[0, 1, 3, 4, 5, 6, 9, 10, 292, ...]]
warnings.warn(ws, PerformanceWarning)
似乎每个字符串列都会出现问题。例如,如果我尝试
myDF[0].dtype
我明白了
Out[38]: dtype('O')
如何解决此问题,即更改字符串列的 dtype 以便 HDFStore 可以将其视为字符串列?
编辑
根据要求提供更多信息
>>> pandas.__version__
Out[49]: '0.13.1'
>>> tables.__version__
Out[53]: '3.1.0'
如下构建pandas数据框:
pandas.read_csv(fName,sep="|",header=None, low_memory=False)
当我尝试时
myDF.info()
我明白了
Int64Index: 153895 entries, 0 to 153894
Data columns (total 644 columns):
0 object
1 object
2 int64
3 object
4 object
5 object
6 object
7 int64
8 float64
9 object
10 object
11 float64
12 float64
...
...
642 float64
643 float64
dtypes: float64(619), int64(2), object(23)
所有字符串列都被读取为object。
【问题讨论】:
-
你能显示pandas版本、pytables版本、os、df.info()、df是如何构建的,还有一个示例
-
你为什么要传递
low_memory?你有任何字符串中的 unicode 吗? -
因为文件太大,而且没有
low_memory似乎不起作用。这是错误C:\PF\WinPython-64bit-3.3.3.3\python-3.3.3.amd64\lib\site-packages\pandas\io\parsers.py:1070: DtypeWarning: Columns (6,292,479,572,581,590,599,608,617,626,635) have mixed types. Specify dtype option on import or set low_memory=False. data = self._reader.read(nrows) -
好的,你是 32 位的吗?按块读取,并创建一个
table存储。 -
不,我是 64 位的。见上面的错误。另外,
table商店是什么意思?
标签: python-3.x pandas pytables