如何从Pandas DataFrame的V1列提取数字生成新列?
解决方案
推荐方法:使用Pandas向量化字符串操作
Pandas内置的str.extract方法专门用于从字符串列中提取正则匹配内容,比手动循环高效得多,代码也更简洁:
import pandas as pd df = pd.DataFrame( data= [['22 take away', 'something'], ['takeaway 56', 'I see'], ['45 takeaway street', ' This is blue'], ['right street', ' This is white']], columns=['V1', 'V2'] ) # 提取1-2位数字,无匹配项填充空格 df['V3'] = df['V1'].str.extract(r'(\d{1,2})').fillna(' ') # 查看结果 print(df)
代码说明:
str.extract(r'(\d{1,2})'):正则表达式中的括号表示捕获组,会提取每一行V1中第一个匹配的1-2位数字,无匹配时返回NaNfillna(' '):将NaN替换为空格,和你目标DataFrame的格式一致
循环实现(不推荐,仅作参考)
如果你想基于自己的循环代码修改,可以先收集所有结果再赋值给新列:
import pandas as pd import re df = pd.DataFrame( data= [['22 take away', 'something'], ['takeaway 56', 'I see'], ['45 takeaway street', ' This is blue'], ['right street', ' This is white']], columns=['V1', 'V2'] ) pattern = r'\d{1,2}' v3_list = [] for text in df['V1']: match = re.search(pattern, text) # 匹配到就取数字,否则存空格 v3_list.append(match.group(0) if match else ' ') df['V3'] = v3_list print(df)
这种方法在数据量大时性能远不如向量化操作,因此优先推荐第一种方法。
内容的提问来源于stack exchange,提问作者econbuffin2019
相关产品推荐
相关产品推荐

