2

1 つの列がオブジェクトで、もう 1 つの列が整数である 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 を作成するときにデータ型を保持する方法はありますか?

4

2 に答える 2

2

答えは、方向を変えない限り、これを行う方法がないということです。

この問題を説明するバグ レポートはこちら: https://github.com/pydata/pandas/issues/359

以下に該当部分を引用します。

以下の例では、「a」は混合タイプのデータフレームです。パネルに含まれると、すべての列が object 型になります。

[..]

パネルはアイテム内でのみ異機種混合にすることができます。パネルに方向オプションを追加したので、次のことができます。

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')
于 2014-03-09T22:23:08.883 に答える
0

タイプの組み合わせを避けるために、それらは別々のフレームにある必要があります。ここに1つの方法があります

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)
于 2013-06-26T20:11:39.447 に答える