将包含可变长度列表的数据帧列转换为dataframe中的mutliple列

时间:2017-11-22 05:18:33

标签: python pandas

我的pandas数据框如下所示。

props包含列表,列表中的元素长度不同。我知道列表中的最大条目数是5.我也知道列表是有序的,即我知道第二项始终属于具有特定标题的列,如“Tense”或“number”。那么如何将列表中的每个条目转换为单独的列?

id  source   type   target          props                        subtype
2   wyrzucić    V   wyrzucisz       [FUT, 2, SG]                 NaN
6   śniadać     V   śniadać         [NFIN]                       NaN
7   bankrutować V   bankrutujący    [PST, ACT, PL, MASC, HUM]    PTCP
8   chwiać      V   będą chwiały    [FUT, 3, PL]                 NaN
23  dobyć       V   dobyłaś         [PST, 2, SG, FEM]            NaN

我尝试过使用usntack()tolist()方法的解决方案。但解决方案不适用于特定情况。

3 个答案:

答案 0 :(得分:3)

apply通常很慢。你可以使用

In [34]: df.join(pd.DataFrame(df.props.values.tolist()))
Out[34]:
   id                      props     0     1     2     3     4
0   2               [FUT, 2, SG]   FUT     2    SG  None  None
1   6                     [NFIN]  NFIN  None  None  None  None
2   7  [PST, ACT, PL, MASC, HUM]   PST   ACT    PL  MASC   HUM
3   8               [FUT, 3, PL]   FUT     3    PL  None  None
4  23          [PST, 2, SG, FEM]   PST     2    SG   FEM  None

详细

In [33]: df
Out[33]:
   id                      props
0   2               [FUT, 2, SG]
1   6                     [NFIN]
2   7  [PST, ACT, PL, MASC, HUM]
3   8               [FUT, 3, PL]
4  23          [PST, 2, SG, FEM]

答案 1 :(得分:1)

您可以尝试使用此UDF并查看它是否有效 -

def col_gen(x):
    props = x['props']
    for i in range(len(props)):
        x['Item'+str(i+1)] = props[i]
    return x

df = df.apply(lambda x: col_gen(x), axis=1)

这将占用每一行,提取props列并将其附加到其他列

答案 2 :(得分:1)

考虑这个简化的数据框

df = pd.DataFrame({'id': [2,6,7,8,23], 'props': [['FUT', 2, 'SG'], ['NFIN'], ['PST', 'ACT', 'PL', 'MASC', 'HUM'], ['FUT', 3, 'PL'],['PST', 2, 'SG', 'FEM']]})

您可以使用

拆分列表列
df[[1,2,3,4,5]] = df.props.apply(pd.Series)

你得到了

    id  props                       1       2   3   4       5
0   2   [FUT, 2, SG]                FUT     2   SG  NaN     NaN
1   6   [NFIN]                      NFIN    NaN NaN NaN     NaN
2   7   [PST, ACT, PL, MASC, HUM]   PST     ACT PL  MASC    HUM
3   8   [FUT, 3, PL]                FUT     3   PL  NaN     NaN
4   23  [PST, 2, SG, FEM]           PST     2   SG  FEM     NaN

注意:您可以指定更相关的列名,我只使用1,2,3,4,5