【问题标题】:How to put match.group() text into a pandas dataframe?如何将 match.group() 文本放入熊猫数据框中?
【发布时间】:2020-12-28 14:10:40
【问题描述】:

我正在使用 re 将一堆文本过滤为我需要的信息。我现在可以使用 match.group() 从文本中的每一行打印出我需要的两条信息。

match.group(1) 是一个数字,match.group(4) 是一个字符串。对于每一行(通过 for 循环进行迭代),我需要将 match.group(1) 添加到数据框中的一列,并将 match.group(4) 添加到另一列。

这里是代码(底部的打印语句需要替换为将每个元素添加到数据框的代码):

finalText = re.search(r'19\s+domestic and stock rights(.*?)20\s+native title rights', rawText, flags=re.S | re.I).group(

pattern = re.compile('(\d+)( ML/year )(in the |the )([\w \/\(\)]+)')

df = pd.DataFrame()

for line in finalText.splitlines():
    matches = re.finditer(pattern, line)

    for matchNum, match in enumerate(matches, start=1):
    print (match.group(1) +","+ match.group(4))

和数学 match.group(1) 是一个数字,而 match.group(4) 是一个位置,因此数据框的示例如下:

Water Usage    Town
55             York
718            Holst
7              Poke

【问题讨论】:

  • 你能添加一些示例数据DataFrame吗?或者rawText 是什么?
  • 你怎么知道要添加到哪一行?
  • 每行或每次迭代只需一个新行
  • rawText 是我使用 re 过滤的文本文件
  • 可以添加输入数据吗?不输出,因为无法测试。

标签: python regex pandas re


【解决方案1】:

如果要添加到新的 DF,则:

你首先在循环外启动一个新的 DF:

new_df = pd.dataframe(columns=['match1','match4'])

在循环内部:

row = [match.group(1), match.group(4)]
new_df.loc[len(new_df)] = row

如果是现有的 DF - 在最后两行代码中将 new_df 替换为 df

【讨论】:

  • 我收到错误“无法设置没有定义列的框架”
  • 我认为上述解决方案的 Jezrael 回答了您的问题
  • @Dhar_ - 无论如何,我也已经修复了我的答案
  • @gtomer - 一个想法 - 不建议更新空 DataFrame,检查 this
【解决方案2】:

创建元组列表并传递给DataFrame构造函数:

out = []
for line in finalText.splitlines():
    matches = re.finditer(pattern, line)

    for matchNum, match in enumerate(matches, start=1):
        out.append((match.group(1), match.group(4)))
        
df = pd.DataFrame(out, columns=['Water Usage','Town'])
print(df)

【讨论】:

    猜你喜欢
    • 2020-07-18
    • 2021-02-14
    • 1970-01-01
    • 2020-02-13
    • 2020-03-24
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 2016-12-25
    相关资源
    最近更新 更多