【问题标题】:Any ideas on Iterating over dataframe and applying regex?关于迭代数据框和应用正则表达式的任何想法?
【发布时间】:2021-07-01 19:39:03
【问题描述】:

这可能是一个初级问题,但我是熊猫新手。

我有一个 csv 数据框,我想遍历每一行通过正则表达式提取特定列中的所有字符串信息。。 (我使用正则表达式的原因是因为最终我想为该列创建一个单独的数据框)

我尝试遍历 for 循环,但出现大量错误。到目前为止,看起来 for 循环将每个输入行读取为列表或系列而不是字符串(如果我错了,请纠正我)。我的主要功能是 iteritems()findall() 但目前没有好的结果。我该如何解决这个问题?

我的数据框如下所示:

df =pd.read_csv('foobar.csv')
df[['column1','column2, 'TEXT']]

我的方法是这样的:

for Individual_row in df['TEXT'].iteritems():
   parsed = re.findall('(.*?)\:\s*?\[(.*?)\], Individual_row)
   res = {g[0].strip() : g[1].strip() for g in parsed}

在此先感谢

【问题讨论】:

    标签: regex pandas dataframe for-loop iteritems


    【解决方案1】:

    您可以尝试以下方法而不是循环:

    df['new_TEXT'] = df['TEXT'].apply(lambda x: [g[0].strip(), g[1].strip()] for g in re.findall('(.*?)\:\s*?\[(.*?)\]', x), na_action='ignore' )
    

    这将使用您的结果数据创建一个新列。

    【讨论】:

    • 我浏览了你的代码并得到一个错误,说'Series'对象没有属性'applymap'但是谢谢你的洞察力!我会研究 applymap()
    • 我已经更新了答案,你可以试试更新的解决方案吗?
    • 我厌倦了更新的答案并得到了“预期的字符串或类似字节的对象”。顺便说一句,df['TEXT'] 的 dtype 显示为'object'。我厌倦了使用 .astype(str) 将 dtype 更改为字符串,但它什么也没做。
    猜你喜欢
    • 1970-01-01
    • 2014-10-07
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多