拆分pandas dataframe列中的元组列表

时间:2015-06-26 09:00:19

标签: python pandas

我有一个数据框,其中每个元素都是元组列表。

import pandas as pd
data={'A':[[('potatoes',9),('cabbages',7),('carrots',5),('onions',2)]],
      'B':[[('cabbages',5),('apples',1),('plums',9),('peaches',6)]]}
df = pd.DataFrame(data).transpose()
print df
                                                  0
A  [(potatoes, 9), (cabbages, 7), (carrots, 5), (...
B  [(cabbages, 5), (apples, 1), (plums, 9), (peac...

我想将其分解为仅包含每个元组元素的数据框:

ww = df.icol(0).apply(pd.Series)
print ww

给出

               0              1             2             3
A  (potatoes, 9)  (cabbages, 7)  (carrots, 5)   (onions, 2)
B  (cabbages, 5)    (apples, 1)    (plums, 9)  (peaches, 6)

我想更进一步,并将其作为最终结果:

          0  1         2  3        4  5        6  7
A  potatoes  9  cabbages  7  carrots  5   onions  2
B  cabbages  5    apples  1    plums  9  peaches  6

我现在通过以下方式管理:

ww2 = pd.concat([ww[col].apply(pd.Series) for col in ww.columns], axis=1)
ww2.columns = range(ww2.shape[1])

但是有更好的方法可以做到这一点。更多的熊猫' -y方式?

1 个答案:

答案 0 :(得分:1)

见下文,

ww3 = pd.DataFrame()    
l = len(ww.columns)
for i in range(l):
    ww3[i] = ww[i].apply(lambda x: x[0])
    ww3[i+l] = ww[i].apply(lambda x: x[1])
print (ww3)

          0  4         1  5        2  6        3  7
A  potatoes  9  cabbages  7  carrots  5   onions  2
B  cabbages  5    apples  1    plums  9  peaches  6