在 iteritem 中的每个项目的 Pandas 数据帧上应用正则表达式并仅返回第一部分

我有一个 txt 文件,里面有州名和大学名。我已经使用 pandas.read_table() 将其读入数据帧。然后我通过 iterrows() 遍历它,并且在每个项目上我只想得到州和大学。可以通过 [edit] 后缀检测状态。然后在其他行中跟随大学,直到出现下一个州。这意味着另一个名称后跟“[edit]”。数据框的视图如下所示:

http://img4.mukewang.com/616553e700017fd103930401.jpg

如图所示,第 0 行中的阿拉巴马州是一个州。第 1 行到第 8 行的大学属于阿拉巴马州,直到第 9 行出现,这是另一个州。第 10 行属于第 9 行的阿拉斯加州。整个数据框具有这种结构。我正在尝试清理它并返回另一个具有此结构的数据框:一列包含州名和大学名,但没有 [] 和 () 之后的部分。然后它看起来像下面这样:


阿拉巴马州


赤褐色


佛罗伦萨


杰克逊维尔


一些记录带有“.”。或名称中的空格。我已经编写了以下正则表达式来获取它们,但结果也给了我“编辑”、“奥本大学”等。换句话说,它返回匹配的任何内容,而不仅仅是第一部分。


代码如下:我已将 txt 文件读入名为 df_university_town 的数据帧中。然后我应用正则表达式如下:


import re

pattern = re.compile(r'([a-zA-Z]+[\.\s]?[a-zA-Z]+)(\w?)')

for key, item in df_university_town.iteritems():

    matches = pattern.finditer(str(item))

    for match in matches:

        print(match.group(1))

这是我得到的结果:

http://img.mukewang.com/616553f20001eaff07860438.jpg

如您所见,最终结果中的“编辑”和“奥本大学”是额外的。我使用了不同的方法并尝试了 match() ,但这也没有帮助。基本上,当我到达“[”或“(”时,搜索不应继续。我不知道我还需要做什么。我感谢任何帮助或建议。

非常感谢您的帮助和您投入的时间。


慕尼黑的夜晚无繁华
浏览 192回答 2
2回答

largeQ

如果您需要抓取这些字符之前的所有内容,请使用.str.split. 正则表达式允许在(or之前使用可选的空白字符,[因此您以后不需要删除它。df.RegStatName.str.split('(\s?\(|\s?\[)').str[0]0      Alabama1       Auburn2     Florence3       Alaska4    Fairbanks5      Arizona6      Nothing7         ThisName: RegStatName, dtype: object样本数据: df                                     RegStatName0                                  Alabama[edit]1                  Auburn (Auburn University)[1]2         Florence (University of NOrth Alabama)3                                   Alaska[edit]4  Fairbanks (University of Alaska Fairbanks)[2]5                                  Arizona[edit]6                                        Nothing7                               This [something]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python