如何用Pandas提取字符串中间段为BB的DataFrame行?附错误解析
解决DataFrame提取中间含"BB"行的问题
问题1:str.split返回数字而非子串
这大概率是因为你要拆分的列不是字符串类型(比如是float/int这类数值类型)。pandas的str.split仅对字符串列生效,如果列是数值,要么返回NaN,要么会把数值本身的小数点当作分隔符拆分出数字片段,完全偏离你的需求。
解决步骤:
- 先把目标列转为字符串类型:
df['col5'] = df['col5'].astype(str) - 再执行拆分,注意
n参数的含义:n=3表示最多拆分3次,会得到4列;如果你的字符串格式是XXX.BB.XXX这种三部分结构,用n=2足够(拆分2次,得到3列):# 拆分后展开为3列,取中间的第2列(索引为1) split_result = df['col5'].str.split('.', expand=True, n=2) df['middle'] = split_result[1]
问题2:df['col5'][1] == 'BB'筛选失败
df['col5'][1]是取col5列的第2行元素(索引从0开始),这个表达式得到的是单个布尔值(True/False),用它筛选只会返回对应位置的行,而不是所有中间部分为"BB"的行。
正确的筛选方式:
- 基于刚才生成的
middle列做条件筛选:# 提取中间部分为"BB"的所有行 target_rows = df[df['middle'] == 'BB']
完整示例代码
import pandas as pd # 构造示例DataFrame(模拟你的数据) df = pd.DataFrame({ 'col5': ['AA.BB.CC', 'DD.EE.FF', 'GG.BB.HH', 123.45, 'II.BB.JJ'] }) # 步骤1:转换列类型为字符串 df['col5'] = df['col5'].astype(str) # 步骤2:拆分字符串提取中间部分 split_cols = df['col5'].str.split('.', expand=True, n=2) df['middle_part'] = split_cols[1] # 步骤3:筛选目标行 filtered_df = df[df['middle_part'] == 'BB'] print(filtered_df)
输出结果会包含所有中间部分为"BB"的行:
col5 middle_part 0 AA.BB.CC BB 2 GG.BB.HH BB 4 II.BB.JJ BB
内容的提问来源于stack exchange,提问作者PlanetAtkinson
相关产品推荐
相关产品推荐

