2012-08-27 16 views
7

Düzleştirilmiş bir dosyada giriş verileri var. Bu verileri tablolara ayırarak normalleştirmek istiyorum. pandas ile düzgün bir şekilde yapabilirim - yani, düzleştirilmiş verileri bir DataFrame örneğine okuyarak ve sonuçta ortaya çıkan DataFrame örneklerini elde etmek için bazı işlevleri uygulayarak mı?pandalar: Bir DataFrame'i normalleştirme

Örnek:

ItemId ItemDescription 
1  scroll of Sneak 
2  scroll of Invisibile 

ve

:

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 

İki DataFrames oluşturmak istiyorum:

Veri böyle bir CSV dosyası biçiminde diskteki bana verilir

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

pandas sadece en basit durum için iyi bir çözüm içeriyorsa (yukarıdaki örnekte olduğu gibi 2 tablodaki bire bir ilişkiyle normalleştirme sonuçları), mevcut gereksinimlerim için yeterli olabilir. Ancak gelecekte daha genel bir çözüme ihtiyacım olabilir.

cevap

9
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