16

私は Wes の Python For Data Analysis に取り組んでいますが、この本では扱われていない奇妙な問題に遭遇しました。

以下のコードでは、彼の本の 199 ページに基づいて、データフレームを作成し、それを使用pd.cut()してcat_obj. その本によるとcat_obj

「特別なカテゴリ オブジェクトです。ビン名を示す文字列の配列のように扱うことができます。内部的には、個別のカテゴリ名を示すレベル配列と、ラベル属性の年齢データのラベル付けが含まれています」

素晴らしい!ただし、まったく同じpd.cut()コード (以下の [5] 内) を使用してデータフレームの新しい列 ( と呼ばれる) を作成すると、その列は特別なカテゴリ変数としてではなく、単に通常の pandas シリーズとしてdf['cat']扱われます。

では、カテゴリ変数として扱われるデータフレームに列を作成するにはどうすればよいでしょうか?

In [4]:

import pandas as pd

raw_data = {'name': ['Miller', 'Jacobson', 'Ali', 'Milner', 'Cooze', 'Jacon', 'Ryaner', 'Sone', 'Sloan', 'Piger', 'Riani', 'Ali'], 
        'score': [25, 94, 57, 62, 70, 25, 94, 57, 62, 70, 62, 70]}
df = pd.DataFrame(raw_data, columns = ['name', 'score'])

bins = [0, 25, 50, 75, 100]
group_names = ['Low', 'Okay', 'Good', 'Great']

In [5]:
cat_obj = pd.cut(df['score'], bins, labels=group_names)
df['cat'] = pd.cut(df['score'], bins, labels=group_names)
In [7]:

type(cat_obj)
Out[7]:
pandas.core.categorical.Categorical
In [8]:

type(df['cat'])
Out[8]:
pandas.core.series.Series
4

3 に答える 3

1

セッターによるこの種の動作が原因で発生している可能性があります-:

サンプルのゲッターとセッター -

class a:
    x = 1
    @property
    def p(self):
        return int(self.x)

    @p.setter
    def p(self,v):
        self.x = v
t = 1.32
a().p = 1.32


print type(t) --> <type 'float'>
print type(a().p) --> <type 'int'>

今のところdf受け入れのみSeries dataで、そのセッターは に変換Categorial dataされSeriesます。df次の Pandas リリースでは、カテゴリ別のサポートが予定されています。

于 2014-08-07T16:25:49.467 に答える
0

http://pandas-docs.github.io/pandas-docs-travis/categorical.htmlから、パンダ 0.15 以降

シリーズを構築するときに dtype="category" を指定します。

In [1]: s = pd.Series(["a","b","c","a"], dtype="category")

In [2]: s
Out[2]: 
0    a
1    b
2    c
3    a
dtype: category
Categories (3, object): [a, b, c]

その後、これを既存のシリーズに追加できます。

または、既存のシリーズまたは列をカテゴリ dtype に変換します。

In [3]: df = pd.DataFrame({"A":["a","b","c","a"]})

In [4]: df["B"] = df["A"].astype('category')

In [5]: df
Out[5]: 
   A  B
0  a  a
1  b  b
2  c  c
3  a  a
于 2015-11-16T12:15:31.457 に答える
0

現在、Series または DataFrame オブジェクトにカテゴリ データを含めることはできませんが、この機能はPandas 0.15 (9 月予定) で実装されます。

于 2014-08-07T15:57:42.133 に答える