我的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()
方法的解决方案。但解决方案不适用于特定情况。
答案 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