python - 从单列中的子字符串/正则表达式匹配创建多个新的数据框列

标签 python pandas dataframe

我有一个 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/

相关文章:

python - 对于一个特定列,使用另一个数据帧的数据更新一个数据帧 - Pandas 和 Python

python - 如何向 pandas.DataFrame 列(列表)添加新元素?

python - 将二维列表(tfidf 结果的密集输出)附加到 pandas 数据帧行中,每个索引

python - 使用 Pandas 将文本数据从请求对象转换为数据框

Python将数组打印成两个结果

结合 `for` 和 `try` block 的 Pythonic 方式

python - 有与 MATLAB 的 vct2mtx 等效的 Python 吗?

python - 同时按行和列降序对 Dataframe 进行排序

python - 拆分 pandas 数据框的所有列表列

python - 使用基于日期的条目填充 Pandas 数据框