我有一个 pandas 数据框,其中有一个名为“Misc”的包罗万象的列,其中包含可选的字符序列。例如:
Misc
1. xxx=something;yyyblah=somethingelse;xyx=blah
2. xyz=meh;yzxx=random;xyx=meh
我真的只对某事=某事的 4-5 个值/案例感兴趣;我想创建新列并将它们添加到这些实例的数据框中,并且“。”如果它们不存在,则为 NaN。 所以如果我对 xxx= ... 感兴趣;和 xyx=...;我的代码将执行以下操作:
Misc xxx xyx
1. xxx=something;yyyblah=somethingelse;xyx=blah | something | blah
2. xyz=meh;yzxx=random;xyx=meh | . | meh
Misc 中的所有信息都以一组 20-30 个字符串开头,并以“;”结尾。我尝试过使用正则表达式...
df['xxx'] = df.Misc.str.extract(r'*(xxx=)*;)$', expand=True)
但这似乎不起作用。我还考虑过简单地删除所有我不关心的实例,然后进行拆分,以便获得一致性。有什么想法吗?
最佳答案
要展开所有参数,您可以使用 .str.extractall()
:
x = (
df.Misc.str.extractall(r"([^=\s]+)=([^;]+);?")
.groupby(level=0)[[0, 1]]
.apply(lambda x: dict(zip(x[0], x[1])))
.apply(pd.Series)
.fillna("N/A")
)
df_out = pd.concat([df, x], axis=1)
print(df_out)
打印:
Misc xxx yyyblah xyx xyz yzxx
0 1. xxx=something;yyyblah=somethingelse;xyx=blah something somethingelse blah N/A N/A
1 2. xyz=meh;yzxx=random;xyx=meh N/A N/A meh meh random
关于python - 从单列中的子字符串/正则表达式匹配创建多个新的数据框列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67154532/