pandas 过滤某列不等于Nan
时间: 2024-08-14 09:02:16 浏览: 45
在Pandas中,要过滤掉某列中的NaN(Not a Number)值,你可以使用布尔索引。这里有两个方法:
1. 使用`isnull()`函数和`~`操作符来查找非NaN值[^1]。例如,假设你有一个名为"VIN"的列,可以这样做:
```python
df_no_nans = df[~df["VIN"].isnull()]
```
这将返回一个新的DataFrame,其中"VIN"列不含NaN。
2. 或者,如果你想要直接筛选掉含有NaN的元素,可以使用`pd.notna()`函数,这与`isnull().astype(bool)`效果相同:
```python
df_without_nans = df[pd.notna(df["VIN"])]
```
这两个方法都会返回一个只包含非NaN值的新DataFrame。
相关问题
pandas去掉某一列含有特殊值的行
可以使用pandas的drop方法来去掉含有特殊值的行,具体步骤如下:
1. 找到含有特殊值的列,例如列名为"column_name"。
2. 使用pandas的drop方法,指定axis=0表示按行删除,使用条件过滤出含有特殊值的行,例如特殊值为NaN或空值,可以使用isna()或isnull()方法来判断,最后使用~符号表示取反,即删除不含有特殊值的行。
示例代码如下:
```python
import pandas as pd
# 创建示例DataFrame
df = pd.DataFrame({'A': [1, 2, 3, 4],
'B': [5, None, 7, 8],
'C': ['foo', 'bar', None, 'baz']})
# 找到含有特殊值的列
column_name = 'B'
# 删除含有特殊值的行
df = df.drop(df[df[column_name].isna()].index)
# 打印结果
print(df)
```
输出结果为:
```
A B C
0 1 5.0 foo
2 3 7.0 NaN
3 4 8.0 baz
```
上述代码中,我们先找到了含有特殊值的列"B",然后使用drop方法删除含有特殊值的行,即使用df[column_name].isna()条件过滤出含有特殊值的行,然后使用drop方法删除这些行。最后打印结果即可。
pandas where条件过滤
在 pandas 中,我们可以使用 `where` 方法进行条件过滤。该方法的基本语法如下:
```python
df.where(condition, other=nan, inplace=False)
```
其中,`condition` 参数是一个布尔数组,表示满足条件的元素,`other` 参数是另一个 DataFrame 或标量,表示不满足条件的元素应替换成的值,默认为 NaN。`inplace` 参数表示是否替换原 DataFrame。
例如,假设有一个 DataFrame `df`:
```python
import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
```
我们可以使用 `where` 方法将所有小于等于 2 的元素替换成 0:
```python
df.where(df <= 2, 0)
```
输出结果为:
```
A B
0 1 4
1 2 5
2 0 0
```
注意,原 DataFrame `df` 并没有改变,因为 `inplace` 参数默认为 False。如果将 `inplace` 参数设置为 True,则会直接修改原 DataFrame。
阅读全文