9

フラット化されたファイルに入力データがあります。このデータをテーブルに分割して正規化したい。pandasつまり、フラット化されたデータをDataFrameインスタンスに読み取り、いくつかの関数を適用して結果のDataFrameインスタンスを取得することによって、それをきちんと行うことができますか?

例:

データは、次のような CSV ファイルの形式でディスク上に提供されます。

ItemId   ClientId   PriceQuoted  ItemDescription
1        1          10           scroll of Sneak
1        2          12           scroll of Sneak
1        3          13           scroll of Sneak
2        2          2500         scroll of Invisible
2        4          2200         scroll of Invisible

2 つの DataFrame を作成したい:

ItemId   ItemDescription
1        scroll of Sneak
2        scroll of Invisibile

ItemId   ClientId   PriceQuoted
1        1          10
1        2          12
1        3          13
2        2          2500
2        4          2200

pandas最も単純なケース (上記の例のように、正規化により多対 1 の関係を持つ 2 つのテーブルが生成される) に対する適切な解決策のみがあれば、現在のニーズには十分かもしれません。ただし、将来的にはより一般的なソリューションが必要になる場合があります。

4

1 に答える 1

11
In [30]: df = pandas.read_csv('foo1.csv', sep='[\s]{2,}')

In [30]: df
Out[30]:
   ItemId  ClientId  PriceQuoted      ItemDescription
0       1         1           10      scroll of Sneak
1       1         2           12      scroll of Sneak
2       1         3           13      scroll of Sneak
3       2         2         2500  scroll of Invisible
4       2         4         2200  scroll of Invisible

In [31]: df1 = df[['ItemId', 'ItemDescription']].drop_duplicates().set_index('ItemId')

In [32]: df1
Out[32]:
            ItemDescription
ItemId
1           scroll of Sneak
2       scroll of Invisible

In [33]: df2 = df[['ItemId', 'ClientId', 'PriceQuoted']]

In [34]: df2
Out[34]:
   ItemId  ClientId  PriceQuoted
0       1         1           10
1       1         2           12
2       1         3           13
3       2         2         2500
4       2         4         2200
于 2012-08-27T11:07:30.987 に答える