You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas DataFrame列中高效查找子串并解决AttributeError报错

如何在Pandas DataFrame列中高效查找子串并解决AttributeError报错

嗨,我来帮你搞定这个问题~

首先咱们先搞清楚你报错的原因:你把row_data['source_id']转成了Python原生的字符串对象,而contains()是Pandas Series(也就是列)专属的方法,原生字符串根本没有这个属性,所以才会抛出AttributeError: 'str' object has no attribute 'contains'的错误。

而且还要提一句:用iterrows()逐行循环处理大DataFrame效率特别低,完全没必要这么做——Pandas最擅长的就是矢量化操作,咱们换个更高效的方式来解决这个问题。

最优解决方案:用Pandas矢量化操作查找子串

  1. 先把整个source_id列转换成字符串类型(因为你的原始数据是int):
my_df['source_id_str'] = my_df['source_id'].astype(str)
  1. 直接用str.contains()筛选出包含目标子串的行:
# 获取所有匹配的行
matching_rows = my_df[my_df['source_id_str'].str.contains('136704')]
  1. 如果需要打印行号和对应的source_id,直接遍历筛选后的结果就行(这时候循环的数据量已经很小了):
for idx, row in matching_rows.iterrows():
    print(idx, row['source_id'])

或者更简洁地直接输出:

print(matching_rows[['source_id']])

如果你一定要用原来的循环方式(不推荐)

那只需要把判断条件改成原生字符串的子串判断方式——用in关键字就行:

for row_num, row_data in my_df.iterrows():
    source_id = str(row_data['source_id'])
    # 把contains改成in
    if '136704' in source_id:
        print(row_num, source_id)

为什么推荐矢量化操作?

因为Pandas的矢量化操作是基于底层C语言实现的,处理大数据集时,速度比Python逐行循环快几十甚至上百倍,能帮你节省大量的时间~

备注:内容来源于stack exchange,提问作者user123892

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 16:13:06