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

按整数与字符串条件筛选行并修改DataFrame列值问题求助

解决DataFrame赋值不生效及数据类型排查问题

我来帮你拆解下遇到的两个问题:赋值没生效,以及Mark列数据类型显示不全的问题,一步步来解决:

一、为什么赋值语句没生效?

你当前的写法df['Porte'].loc[(df['Capital Social'] == 0) & (df['Mark'] == 'A')]='Big'属于链式索引(先提取Porte列,再用loc定位),这种写法有时候会触发Pandas的SettingWithCopyWarning,导致你修改的是原DataFrame的副本而非本身,所以原表没变化。

正确的写法应该把列名放在loc的第二个参数中,直接对原DataFrame的指定位置赋值:

df.loc[(df['Capital Social'] == 0) & (df['Mark'] == 'A'), 'Porte'] = 'Big'

二、排查Mark列的数据类型及匹配问题

你提到Mark列的dtypes显示不全,首先得确认它的完整类型和数据内容:

  1. 先运行以下命令查看完整的类型信息:

    print(df['Mark'].dtype)
    # 或者查看整个DataFrame的详细信息
    df.info()
    

    如果Mark列是object类型,大概率是存在字符串格式问题,比如:

    • 字符串前后有空格(比如" A"或"A ")
    • 大小写不一致(比如是"a"而非"A")
    • 存在空值或其他异常值
  2. 先清理Mark列的字符串格式,再尝试赋值:

    # 去除字符串前后的空格
    df['Mark'] = df['Mark'].str.strip()
    # 统一转为大写(如果需要)
    df['Mark'] = df['Mark'].str.upper()
    
  3. 验证你的筛选条件是否能匹配到行:
    运行以下代码确认是否有符合条件的记录:

    matching_rows = df[(df['Capital Social'] == 0) & (df['Mark'] == 'A')]
    print(matching_rows)
    

    如果输出为空,说明你的数据里没有同时满足Capital Social=0且Mark="A"的行,这时候就要检查原始数据的内容了。

三、补充:关于Capital Social的Int64类型

Int64是Pandas的可空整数类型,判断==0是完全没问题的,不需要额外转换类型,只要确保该列的0不是字符串类型的"0"即可(不过你已经确认是Int64,所以这部分没问题)。

把这些步骤做完,应该就能成功修改Porte列的值了。

内容的提问来源于stack exchange,提问作者aabujamra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:59:41