为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕尼黑的夜晚无繁华 2021-10-12 17:22:28
我有一个 txt 文件,里面有州名和大学名。我已经使用 pandas.read_table() 将其读入数据帧。然后我通过 iterrows() 遍历它,并且在每个项目上我只想得到州和大学。可以通过 [edit] 后缀检测状态。然后在其他行中跟随大学,直到出现下一个州。这意味着另一个名称后跟“[edit]”。数据框的视图如下所示:如图所示,第 0 行中的阿拉巴马州是一个州。第 1 行到第 8 行的大学属于阿拉巴马州,直到第 9 行出现,这是另一个州。第 10 行属于第 9 行的阿拉斯加州。整个数据框具有这种结构。我正在尝试清理它并返回另一个具有此结构的数据框:一列包含州名和大学名,但没有 [] 和 () 之后的部分。然后它看起来像下面这样:阿拉巴马州赤褐色佛罗伦萨杰克逊维尔一些记录带有“.”。或名称中的空格。我已经编写了以下正则表达式来获取它们,但结果也给了我“编辑”、“奥本大学”等。换句话说,它返回匹配的任何内容,而不仅仅是第一部分。代码如下:我已将 txt 文件读入名为 df_university_town 的数据帧中。然后我应用正则表达式如下:import repattern = 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))这是我得到的结果:如您所见,最终结果中的“编辑”和“奥本大学”是额外的。我使用了不同的方法并尝试了 match() ,但这也没有帮助。基本上,当我到达“[”或“(”时,搜索不应继续。我不知道我还需要做什么。我感谢任何帮助或建议。非常感谢您的帮助和您投入的时间。
查看完整描述

2 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

如果您需要抓取这些字符之前的所有内容,请使用.str.split. 正则表达式允许在(or之前使用可选的空白字符,[因此您以后不需要删除它。


df.RegStatName.str.split('(\s?\(|\s?\[)').str[0]


0      Alabama

1       Auburn

2     Florence

3       Alaska

4    Fairbanks

5      Arizona

6      Nothing

7         This

Name: RegStatName, dtype: object

样本数据: df

                                     RegStatName

0                                  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                                        Nothing

7                               This [something]


查看完整回答
反对 回复 2021-10-12
  • 2 回答
  • 0 关注
  • 191 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信