使用python从文本列中提取有意义的信息
我有一个有两列的表。我必须从笔记栏中提取有意义的信息。i、 e.我需要在一列中提取日期,在一列中提取日期后的信息,然后提取ID使用python从文本列中提取有意义的信息,python,python-3.x,python-2.7,Python,Python 3.x,Python 2.7,我有一个有两列的表。我必须从笔记栏中提取有意义的信息。i、 e.我需要在一列中提取日期,在一列中提取日期后的信息,然后提取ID Notes, ID Movie Date 05-28-2018 Passed, 1010 MTD loan slip dated 8-10-14 the Issued, 1111 Max over date 10-2-15 and repaired, 11232 输出- Notes ID Date
Notes, ID
Movie Date 05-28-2018 Passed, 1010
MTD loan slip dated 8-10-14 the Issued, 1111
Max over date 10-2-15 and repaired, 11232
输出-
Notes ID Date Status
Movie Date 05-28-2018 Passed 1010 5/28/2018 Passed
loan slip dated 8-10-14 Issued 1111 8/10/2014 Issued
Max over date 10-2-15 and repaired 11232 10/2/2015 repaired
这是我的密码-
df = pd.read_sql('select * from <table>', engine)
searchfor = [' dated', ' date', ' Date', ' Dated']
df2 = df[df['Notes'] .str.contains('|'.join(searchfor), na = False)]
..................
df=pd.read\u sql('select*from',引擎)
searchfor=['日期','日期','日期','日期']
df2=df[df['Notes'].str.contains('|'.join(searchfor),na=False)]
..................
谢谢你在这方面的帮助。谢谢。我想要一些循环
示例:
import pandas as pd
df = pd.read_csv("data.csv")
searchforstatus = [' Passed', ' Issued', ' repaired']
for idx, row in df.iterrows():
for c in searchforstatus:
if c in row['Notes']:
df.loc[idx, 'Status'] = c
结果
Notes ID Status
0 Movie Date 05-28-2018 Passed 1010 Passed
1 MTD loan slip dated 8-10-14 the Issued 1111 Issued
2 Max over date 10-2-15 and repaired 11232 repaired
我使用的数据可以在这里找到:
从iterrows()获取行后的正则表达式也可以提取信息,如果可能的话
s = 'Movie Date 05-28-2018 Passed'
p = re.search(r'Dated?\s(\d+-\d+-\d+)\s([a-zA-Z]+)',s)
p、 组(1)将具有日期值,组(2)将具有“已通过”值。希望这有帮助。期望的输出是什么?在上面的帖子中,“输出”作为我期望的输出。如果不清楚,请告诉我。对于2014年10月8日发布的MTD贷款单,这不适用于我是的。这可能是因为模式的设计方式。它在单词date中寻找一个“D”,但在本例中,它以一个小的“D”开头。该模式可以像重新搜索(r'D?D?ated?\s(\D+-\D+-\D+)\s([a-zA-Z]+.*),s)一样进行更改,它与小写或大写日期匹配,还捕获日期后字符串的其余部分。希望我说的很清楚,谢谢你的回复。它正在抛出一个错误-类型为“NoneType”的参数不可iterable。你能把完整的密码寄给我吗。代码对我来说很好用。我更新了我使用的数据的链接。我将它们保存在.csv文件中,并更新了我的答案,以显示如何加载它们