按整数与字符串条件筛选行并修改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显示不全,首先得确认它的完整类型和数据内容:
先运行以下命令查看完整的类型信息:
print(df['Mark'].dtype) # 或者查看整个DataFrame的详细信息 df.info()如果Mark列是
object类型,大概率是存在字符串格式问题,比如:- 字符串前后有空格(比如
" A"或"A ") - 大小写不一致(比如是
"a"而非"A") - 存在空值或其他异常值
- 字符串前后有空格(比如
先清理Mark列的字符串格式,再尝试赋值:
# 去除字符串前后的空格 df['Mark'] = df['Mark'].str.strip() # 统一转为大写(如果需要) df['Mark'] = df['Mark'].str.upper()验证你的筛选条件是否能匹配到行:
运行以下代码确认是否有符合条件的记录: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
相关产品推荐
相关产品推荐

