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

如何用DataFrame两列值筛选数据并存新表?遇TypeError报错求助

解决方案

报错原因分析

出现TypeError: 'NoneType' object is not subscriptable最可能的原因是变量df本身是None——你没有成功创建或加载目标DataFrame,导致尝试通过下标(df['fruit'])访问时触发错误。其次也可能是列名拼写错误,但这种情况通常会报KeyError,所以优先排查df是否有效。

正确实现步骤

你的需求是筛选出fruit列为banana且country of origin列不为Italy的数据,存入新DataFrame,原代码逻辑是删除符合条件的行,完全和需求相反,以下是正确实现:

  1. 先确认df是有效的DataFrame:
# 打印df检查是否存在且包含所需列
print(df.head())

如果输出为None,说明你需要先正确加载或创建DataFrame(比如用pd.read_csv()读取文件,或手动构造)。

  1. 直接通过布尔索引筛选数据到新DataFrame:
import pandas as pd

# 确保df已正确初始化
# 示例构造df(如果是从文件加载则替换为pd.read_csv等)
df = pd.DataFrame({
    'fruit': ['banana', 'apple', 'banana', 'banana'],
    'country of origin': ['Brazil', 'Italy', 'Italy', 'Costa Rica']
})

# 筛选符合条件的行,存入new_df
new_df = df[(df['fruit'] == 'banana') & (df['country of origin'] != 'Italy')]

# 查看结果
print(new_df)

若你实际需求是删除原df中符合条件的行

如果你的真实意图是删除df里fruit为banana且产地不是Italy的行(和原需求相反),确保df有效后,可修改代码为:

# 先获取要删除的行索引
drop_index = df[(df['fruit'] == 'banana') & (df['country of origin'] != 'Italy')].index
# 删除行,inplace=True直接修改原df
df.drop(drop_index, inplace=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:25:46