如何用DataFrame两列值筛选数据并存新表?遇TypeError报错求助
解决方案
报错原因分析
出现TypeError: 'NoneType' object is not subscriptable最可能的原因是变量df本身是None——你没有成功创建或加载目标DataFrame,导致尝试通过下标(df['fruit'])访问时触发错误。其次也可能是列名拼写错误,但这种情况通常会报KeyError,所以优先排查df是否有效。
正确实现步骤
你的需求是筛选出fruit列为banana且country of origin列不为Italy的数据,存入新DataFrame,原代码逻辑是删除符合条件的行,完全和需求相反,以下是正确实现:
- 先确认
df是有效的DataFrame:
# 打印df检查是否存在且包含所需列 print(df.head())
如果输出为None,说明你需要先正确加载或创建DataFrame(比如用pd.read_csv()读取文件,或手动构造)。
- 直接通过布尔索引筛选数据到新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
相关产品推荐
相关产品推荐

