2017-07-27 121 views
2

我有一個稱爲「屬性」列中的數據幀DF,下面拆分列修改數據幀

attributes 
{"id":1,"firstname":"Joe","lastname":"Lee"} 
{"id":12,"firstname":"Brian","lastname":"Li"} 
{"id":2,"firstname":"Ron","lastname":"Stein"} 

如何拆分此列到不同的列,使我的數據框現在看起來像所示 -

attributes          id firstname lastname 
{"id":1,"firstname":"Joe","lastname":"Lee"} 1  Joe   Lee 
{"id":12,"firstname":"Brian","lastname":"Li"} 12 Brian  Li 
{"id":2,"firstname":"Ron","lastname":"Stein"} 2  Ron   Stein 

我試圖訪問諸如

df.attributes.id 
df.attributes.firstname 

每個值,但我不能!您的幫助將不勝感激。

回答

4

你可以使用apply

In [98]: df.attributes.apply(pd.Series) 
Out[98]: 
    firstname id lastname 
0  Joe 1  Lee 
1  Brian 12  Li 
2  Ron 2 Stein 

結果加入到原df

In [99]: df.join(df.attributes.apply(pd.Series)) 
Out[99]: 
              attributes firstname id lastname 
0 {u'lastname': u'Lee', u'id': 1, u'firstname': ...  Joe 1  Lee 
1 {u'lastname': u'Li', u'id': 12, u'firstname': ...  Brian 12  Li 
2 {u'lastname': u'Stein', u'id': 2, u'firstname'...  Ron 2 Stein 

In [100]: dff = df.join(df.attributes.apply(pd.Series)) 

訪問firstname

In [101]: dff.firstname 
Out[101]: 
0  Joe 
1 Brian 
2  Ron 
Name: firstname, dtype: object 
+0

我學到新的東西,這是相當優雅。謝謝! – Uvar

2

我們可以使用pd.DataFrame.from_records()

演示:

In [24]: df 
Out[24]: 
              attributes  aaa 
0 {'id': 1, 'firstname': 'Joe', 'lastname': 'Lee'} 0.345719 
1 {'id': 12, 'firstname': 'Brian', 'lastname': '... 0.849491 
2 {'id': 2, 'firstname': 'Ron', 'lastname': 'Ste... 0.412470 

In [25]: df.join(pd.DataFrame.from_records(df.attributes.values, index=df.index)) 
Out[25]: 
              attributes  aaa firstname id lastname 
0 {'id': 1, 'firstname': 'Joe', 'lastname': 'Lee'} 0.345719  Joe 1  Lee 
1 {'id': 12, 'firstname': 'Brian', 'lastname': '... 0.849491  Brian 12  Li 
2 {'id': 2, 'firstname': 'Ron', 'lastname': 'Ste... 0.412470  Ron 2 Stein 
0

普通pd.DataFrame構造將與列表

pd.DataFrame(df.attributes.tolist()) 

    firstname id lastname 
0  Joe 1  Lee 
1  Brian 12  Li 
2  Ron 2 Stein 

工作,join

df.join(pd.DataFrame(df.attributes.tolist(), df.index)) 

               attributes firstname id lastname 
0 {u'lastname': u'Lee', u'id': 1, u'firstname': u'Joe'}  Joe 1  Lee 
1 {u'lastname': u'Li', u'id': 12, u'firstname': u'Brian'}  Brian 12  Li 
2 {u'lastname': u'Stein', u'id': 2, u'firstname': u'Ron'}  Ron 2 Stein