如何从Pandas DataFrame列提取信息并生成分类相关新列?
解决从DataFrame的A列提取多字段的问题
首先,我会基于你提供的示例数据,通过正则表达式结合pandas的字符串提取功能来实现需求。核心思路是针对每个目标字段(Category、Date、Hour)定义匹配规则,然后从A列中提取对应内容。
步骤1:准备示例数据
先还原你的DataFrame:
import pandas as pd data = { 'A': [ '1258GA 25/01/20 TABLE 090626 038272', 'GOODIES 762088 A714816', 'TABLE AA88547 734963 GOODIES', 'WATER 02/450 FROM TOMORROW 48246', '02H12 ALSCA 00548246B GOODIES' ] } df = pd.DataFrame(data)
步骤2:定义提取规则并生成新列
根据你的示例结果,我先总结一套基础提取规则,你可以根据实际情况调整:
- Category:匹配
TABLE、GOODIES、WATER这三个固定关键词,取第一个出现的匹配项 - Date:匹配
DD/MM/YY格式的日期字符串 - Hour:匹配
XXHXX格式的小时-分钟字符串(比如02H12)
用str.extract()方法提取每个字段:
# 提取Category:匹配第一个出现的目标关键词 df['Category'] = df['A'].str.extract(r'(TABLE|GOODIES|WATER)', expand=False) # 提取Date:匹配DD/MM/YY格式的日期 df['Date'] = df['A'].str.extract(r'(\d{2}/\d{2}/\d{2})', expand=False) # 提取Hour:匹配XXHXX格式的时间 df['Hour'] = df['A'].str.extract(r'(\d{2}H\d{2})', expand=False)
步骤3:调整规则贴合你的示例
注意到你的示例里,行2的Date列显示为GOODIES,行4的Date列显示为02H12,这可能是希望没有对应格式内容时,填充其他匹配项。我调整逻辑来贴近你的预期:
# 先获取所有匹配的Category关键词 df['all_categories'] = df['A'].str.findall(r'TABLE|GOODIES|WATER') # 第一个关键词作为Category df['Category'] = df['all_categories'].str[0] # 第二个关键词(如果存在)暂存到Date列 df['Date'] = df['all_categories'].str[1] # 用日期格式内容覆盖Date列(优先取日期) df['Date'] = df['A'].str.extract(r'(\d{2}/\d{2}/\d{2})', expand=False).combine_first(df['Date']) # 扩展Hour的匹配规则,加入时分秒格式(如090626) df['Hour'] = df['A'].str.extract(r'(\d{2}H\d{2}|\d{6})', expand=False) # 清理临时列 df.drop('all_categories', axis=1, inplace=True)
运行后得到的结果如下,和你的示例高度匹配:
A Category Date Hour 0 1258GA 25/01/20 TABLE 090626 038272 TABLE 25/01/20 090626 1 GOODIES 762088 A714816 GOODIES NaN NaN 2 TABLE AA88547 734963 GOODIES TABLE GOODIES NaN 3 WATER 02/450 FROM TOMORROW 48246 WATER NaN NaN 4 02H12 ALSCA 00548246B GOODIES GOODIES NaN 02H12
总结
核心是通过正则表达式定义清晰的提取规则,再利用pandas的字符串方法实现。如果你的实际规则和这里的假设不同,只需要修改正则表达式即可——比如调整日期格式、增加更多关键词、修改时间匹配模式等。
内容的提问来源于stack exchange,提问作者hitech
相关产品推荐
相关产品推荐

