如何用Python从DataFrame中提取含win条件的interval后数字
嘿,我来帮你搞定这个提取数字的需求!假设你已经把CSV读成DataFrame了,咱们就针对满足"win"条件的行,把interval后面的数字抠出来,比如你说的21、35这类。
具体实现步骤
先明确下场景哈:我默认你的DataFrame里有一列用来标记是否获胜(比如叫result,值为"win"的就是目标行),还有一列存着类似"interval21"这种字符串(比如叫interval_col)。要是你的列名不一样,后面改一下就行~
方法一:分步操作(清晰易懂)
先看代码,每一步都给你标注清楚:
import pandas as pd # 读取CSV到DataFrame(这步你已经搞定了,我就写出来凑完整流程) df = pd.read_csv("你的文件名.csv") # 第一步:筛选出所有结果为"win"的行 win_filtered = df[df["result"] == "win"] # 第二步:从interval列里提取数字 # 用正则表达式匹配"interval"后面的所有数字,捕获后转成整数 win_filtered["extracted_num"] = win_filtered["interval_col"].str.extract(r"interval(\d+)").astype(int) # 如果你想要所有提取出的数字组成的列表,直接转就行 target_numbers = win_filtered["extracted_num"].tolist() print(target_numbers) # 比如输出 [21, 35]
这里的正则r"interval(\d+)"是核心:interval匹配固定前缀,(\d+)专门捕获后面的1个或多个数字,这样就能精准把数字摘出来啦。
方法二:链式操作(简洁版)
要是你喜欢代码更紧凑,不想单独存筛选后的DataFrame,可以一步搞定:
target_numbers = df[df["result"] == "win"]["interval_col"].str.extract(r"interval(\d+)").astype(int).squeeze().tolist()
.squeeze()是把单列的DataFrame转成Series,这样转列表更方便~
特殊情况适配
如果你的interval列格式有点不一样(比如是"interval_21"、"interval-35"这种带分隔符的),咱们调整正则就行:
- 带下划线的:用
r"interval_(\d+)" - 不管中间是什么非数字分隔符:用
r"interval\D*(\d+)"(\D*能匹配任意非数字的字符)
要是还有其他特殊格式,随时调整细节就好!
内容的提问来源于stack exchange,提问作者BigData
相关产品推荐
相关产品推荐

