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

Python 3.x中如何从列表提取DataFrame缺失值生成新DataFrame

解决方法:提取列表中有但DataFrame中没有的值生成新DataFrame

嘿,我来帮你搞定这个问题!你想要的是找出day_list里存在但df['days']中没有的元素,再把这些元素转成新的DataFrame对吧?先说说你之前代码的问题,再给你两种靠谱的实现方式:

为什么之前的代码不对?

  • 你的第一个代码块df1 = df[~df.days.isin(day_list)]:逻辑搞反啦!你是在原DataFrame里筛选不在day_list中的行,但原df的所有days值都包含在day_list里,所以自然得到空DataFrame。
  • 第二个代码块df2 = df[~day_list.isin(df.days)]:isin()是pandas的Series或DataFrame专属方法,普通Python列表没有这个属性,所以会抛出AttributeError。

正确的实现方式

方法1:用Python列表推导式筛选(直观易懂)

先从day_list里筛选出不在df['days']中的元素,再把这些元素转换成DataFrame:

import pandas as pd

# 创建原DataFrame
df = pd.DataFrame({'days':['monday','tuesday','wednesday','thursday','friday']})
# 完整的星期列表
day_list = ['monday','tuesday','wednesday','thursday','friday','saturday','sunday']

# 筛选出day_list有但df没有的元素
missing_days = [day for day in day_list if day not in df['days'].tolist()]
# 转换成新的DataFrame
df_missing = pd.DataFrame({'days': missing_days})

print(df_missing)

输出结果:

days
0  saturday
1    sunday

方法2:用pandas Series处理(更贴合pandas风格)

把day_list转换成pandas的Series,再用isin()方法筛选,最后转成DataFrame:

import pandas as pd

df = pd.DataFrame({'days':['monday','tuesday','wednesday','thursday','friday']})
day_list = ['monday','tuesday','wednesday','thursday','friday','saturday','sunday']

# 把列表转成Series
s_day_list = pd.Series(day_list)
# 筛选出不在df['days']中的元素
missing_series = s_day_list[~s_day_list.isin(df['days'])]
# 转换成DataFrame并指定列名
df_missing = missing_series.to_frame(name='days')

print(df_missing)

这个方法和你熟悉的R代码逻辑很像:R里的day_list[! (day_list %in% df$days)]对应到这里就是s_day_list[~s_day_list.isin(df['days'])],只是语法稍有不同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:32:52