panda在创建面板时保留数据类型



如果我创建一个DataFrame,其中一列是对象,另一列是整数,将该DataFrame放入字典中,然后使用该字典创建Panel,则整数数据类型将消失:

import pandas as pd
import datetime as dt
a=['a' for i in range(1000)]
b=[i for i in range(1000)]
c = {'c':a[:], 'b':b[:]}
df = pd.DataFrame(c)
print df
d = dict()
d['x'] = df
p = pd.Panel(d)
print p['x']

输出:

<class 'pandas.core.frame.DataFrame'>
Int64Index: 1000 entries, 0 to 999
Data columns (total 2 columns):
b    1000  non-null values
c    1000  non-null values
dtypes: int64(1), object(1)
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1000 entries, 0 to 999
Data columns (total 2 columns):
b    1000  non-null values
c    1000  non-null values
dtypes: object(2)

当从包含DataFrame的字典创建Panel时,有没有一种方法可以保留数据类型?

答案是,除非改变方向,否则无法做到这一点。

解释该问题的错误报告如下:https://github.com/pydata/pandas/issues/359

我引用以下相关部分:

在下面的示例中,"a"是一个混合类型的数据帧。一旦包含在在面板中,所有列都变成类型对象:

[..]

面板只能在项目中是异构的。我刚刚添加了一个东方选择面板,这样你就可以做:

In [4]: panel = Panel.from_dict({'1':a,'2':b}, orient='minor')
In [5]: panel
Out[5]: 
<class 'pandas.core.panel.Panel'>
Dimensions: 3 (items) x 30 (major) x 2 (minor)
Items: a to c
Major axis: 0 to 29
Minor axis: 1 to 2
In [6]: panel['a'].values.dtype
Out[6]: dtype('float64')
In [7]: panel['b'].values.dtype
Out[7]: dtype('object')
In [8]: panel['c'].values.dtype
Out[8]: dtype('float64')

它们需要在单独的框架中,以避免组合类型。这是一种

In [52]: df = pd.DataFrame(c)
In [53]: df
Out[53]: 
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1000 entries, 0 to 999
Data columns (total 2 columns):
b    1000  non-null values
c    1000  non-null values
dtypes: int64(1), object(1)
In [54]: df['x'] = 'x'
In [55]: df['y'] = range(len(df))
In [56]: p = df.set_index(['x','y']).to_panel()
In [10]: p['b']
Out[10]: 
<class 'pandas.core.frame.DataFrame'>
Index: 1 entries, x to x
Columns: 1000 entries, 0 to 999
dtypes: int64(1000)
In [11]: p['c']
Out[11]: 
<class 'pandas.core.frame.DataFrame'>
Index: 1 entries, x to x
Columns: 1000 entries, 0 to 999
dtypes: object(1000)

最新更新