pandas 实现 in 和 not in 的用法及心得

本文介绍如何使用Pandas的isin方法实现SQL中的IN和NOT IN功能,通过实例展示了如何筛选DataFrame中包含或不包含特定值的行,提供了一种更简洁高效的数据处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经常在处理数据中从一个总数据中清洗出数据, 但是有时候需要把没有处理的数据也统计出来.

这时候就需要使用:

pandas.DataFrame.isin

DataFrame中的每个元素是否都包含在值中

pandas文档位置

例子:

如何实现SQL的等价物IN和NOT IN?

我有一个包含所需值的列表。下面是一个场景:

df = pd.DataFrame({'countries':['US','UK','Germany','China']})
countries = ['UK','China']

# pseudo-code:
df[df['countries'] not in countries]

之前的做法是这样:

df = pd.DataFrame({'countries':['US','UK','Germany','China']})
countries = pd.DataFrame({'countries':['UK','China'], 'matched':True})

# IN
df.merge(countries,how='inner',on='countries')

# NOT IN
not_in = df.merge(countries,how='left',on='countries')
not_in = not_in[pd.isnull(not_in['matched'])]

但上面这样做觉得很不好, 也翻了文档才找到比较好解决方式.

# IN
something.isin(somewhere)

# NOT IN
~something.isin(somewhere)

例子:

>>> df
  countries
0        US
1        UK
2   Germany
3     China
>>> countries
['UK', 'China']
>>> df.countries.isin(countries)
0    False
1     True
2    False
3     True
Name: countries, dtype: bool
>>> df[df.countries.isin(countries)]
  countries
1        UK
3     China
>>> df[~df.countries.isin(countries)]
  countries
0        US
2   Germany

 

 

<think>用户提到在Spyder控制台查询HDF格式文件时遇到了`NameError: name 'sat' is not defined`的错误。这表明代码中引用了一个名为`sat`的对象,但在该作用域内并未对其进行正确定义或初始化。 为了更好地理解问题来源,我们可以从以下几个方面入手: 1. **确认变量是否存在**:确保`sat`已经被正确地定义,并且它指向的内容是可以访问的有效资源。 2. **加载HDF文件的过程**:通常我们需要通过专门库(如`h5py`, `xarray` 或者 `pandas`) 来读取 HDF 文件。若未恰当完成此步骤,则可能出现这种错误。 3. **变量名称冲突或拼写错误**:有可能是因为输入命令时手误造成的简单名字不匹配情况;也可能是不同地方用了相同的标识符造成混淆。 4. **执行顺序问题**:如果相关脚本里的某些必要指令尚未被执行就试图调用相应成果的话,自然会引发此类异常。 基于上述思考方向,下面给出更具体的解答:</think> 当你尝试在 Spyder 控制台上操作 hdf 格式的文件并遭遇 `NameError: name 'sat' is not defined` 错误时,这意味着系统无法识别所谓的 "sat" 对象。一般而言,这种情况的发生往往源于以下几个原因之一: ### 可能原因一:缺少必要的导入或者定义 如果你打算利用特定模块的功能去处理数据但却忘了引入对应的库,那么显然程序不知道怎么去做那些任务。对于HDF类型的文档来说,常用的工具有 h5py xarray 。假如你需要借助它们来进行数据分析却没有事先做好准备动作的话就会碰到这样的状况。例如你应该先做类似以下的事情: ```python import h5py ``` 或者是, ```python import xarray as xr ``` 之后再继续你的后续工作流程。 另外一方面考虑,“sat” 这个单词本身也应该代表某个已经建立起来的东西 —— 它可以是从硬盘上加载进来的资料集、经过计算得出的新结果等等形式呈现出来的一个实体存在物。所以,在正式运用之前一定要记得给予确切含义。 像这样简单的例子演示了怎样打开一个 .hdf 文件并将其中一部分存储为名叫 sat 的 DataFrame: ```python with h5py.File("yourfile.hdf", "r") as f: df = pd.DataFrame(f["dataset_name"][:]) # 假设我们将这个 dataframe 称作 'sat' sat = df ``` 当然这里的 dataset_name 应当替换成为实际存在于 hdf 文件内的组或表的名字。 ### 可能原因二:代码段落之间的依赖关系没搞清楚 有时候我们的项目是由多个相互关联的小部分组合而成的大整体。在这种情况下,每一个独立的部分都依赖于另一个先前完成的任务输出作为它的起点材料之一。如果我们随便挑了个中间环节单独拿出来跑一遍测试发现失败就是因为少了前面几步构建出来的基础架构支持的缘故啦! 比如说我们有一个很长的工作流包含了如下几个步骤: - 加载原始 HDF 数据源; - 提炼出感兴趣区域的数据项形成一个新的集合称其为 ‘sat’; - 针对该新生成的数据进行各种变换分析展示图表之类的活动... 此时如果没有按照既定次序依次往下推进而是跳跃式选几行乱敲一阵子肯定得不到预期效果咯~ ### 解决办法汇总 综上所述,针对你现在面临的情况可以从这几个角度出发寻找解决方案: #### 方法A——完整复现整个过程 确保所有前期准备工作均已妥善落实完毕后再开始实验探究阶段的操作。包括但不限于安装好所需的软件包环境配置正常以及准确无误地逐条复制粘贴官方教程里示范过的标准做法直至最终成功构造目标对象“sat”。 #### 方法B——检查现有空间状态 可以直接询问 Python 当前命名空间到底都有些什么东东吧!这样一来就能立刻弄明白是否真的遗漏掉了重要组成部分。“sat” 名字确实挂在这里吗? 如果不在那就得回头找找看是在哪一步丢失掉联系链路啦~ ``` python print(locals()) ``` 或是仅仅关心全局范围内存在的事物即可满足需求。 ```python globals().keys() ``` #### 方法C——局部调试技巧 把焦点缩小至最小范围之内逐一排查故障点。比如现在怀疑就是关于那个神秘兮兮的 “sat”,那干脆直截了当地问一句好了:“告诉我现在的身份呗~” ```python try: print(sat) except NameError: print("'sat' does not exist") ``` 根据返回的信息进一步调整策略直到彻底解决问题为止哦~ 希望以上内容对你有所帮助呀!如果还有疑问欢迎随时提问交流学习心得体验共同进步哈~ 😊
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ch3nnn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值