如何用Python pandas从DataFrame字符串列提取最大数字生成新列
解决方法
原代码使用str.extract()仅会返回每行第一个匹配的数字,要实现取最大值需求,需要先提取每行所有数字,再转换为数值类型后取最大值。
修改后的完整代码如下:
import pandas as pd data = [['tom 11 abc 100', 10], ['nick12 text 1 1000', 15], ['juli078 aq 199 299', 14]] df = pd.DataFrame(data, columns = ['col1', 'col2']) # 核心修改逻辑 df["Number"] = df['col1'].str.findall(r'(\d+(?:\.\d+)?)').apply(lambda x: max(map(int, x)) if x else pd.NA) print(df)
逻辑说明
str.findall(r'(\d+(?:\.\d+)?)'):匹配每行字符串中所有符合规则的数字序列,返回列表格式的结果apply(lambda x: max(map(int, x)) if x else pd.NA):对每行的数字列表,先将所有字符串数字转为整数,再取最大值;如果该行没有匹配到数字则返回空值避免报错
如果需要支持提取浮点数字,把map(int, x)改为map(float, x)即可。
运行后输出结果和预期一致:
col1 col2 Number 0 tom 11 abc 100 10 100 1 nick12 text 1 1000 15 1000 2 juli078 aq 199 299 14 299
内容的提问来源于stack exchange,提问作者Kalenji
相关产品推荐
相关产品推荐

