Pandas有一些引人注目的数据结构:
- 一个有多列的表格就是DataFrame
- DataFrame的一列,或者一个类似列表的对象,被称为系列
DataFrame是一个很像SQL或Excel的表。它的结构相似,使得它可以使用类似的操作,如聚合、过滤和透视。
Pandas where
Pandas where()是一个库函数,用于检查DataFrame的一个或多个条件并返回结果。pd.DataFrame.where()函数接受多个参数并根据条件返回结果。
默认情况下,不满足条件的行被填充为NaN 值。 numpy where和pandas where的区别在于,DataFrame提供了调用where()方法时的默认值。
语法
DataFrame.where(cond, other=nan, inplace=False,
axis=None, level=None, errors=’raise’,
try_cast=False, raise_on_error=None)
参数
cond: bool 系列/DataFrame,类似数组,或可调用。
如果where条件为True,保留原值。如果where cond为False,则用其他相应的值来替换。 如果cond是可调用的,则对Series/DataFrame进行计算,并返回布尔值Series/DataFrame或数组。
other: 标量、Series/DataFrame或可调用条目,如果cond为False, 则用其他参数 中的相应值替换。如果其他项是可调用的,那么它将在Series/DataFrame上进行计算,并且应该返回标量或Series/DataFrame。
inplace: bool, default False
是否对数据进行就地操作。
axis: int,默认为none
对齐轴,如果需要的话。
level :int,默认为None
对齐水平,如果需要的话。
errors: str,{'提高','忽略'},默认为'提高'。
注意,目前,errors参数不会影响结果,并且会一直强制到一个合适的dtype。
- 'raise': 允许异常被提出。
- 'ignore':抑制错误时的异常返回原始对象。
try_cast: bool, default False.
尝试将一个结果转换为输入类型(如果可能的话)。
返回值
它返回与调用者相同的类型。
实现Pandas DataFrame where()
请看下面的代码:
# app.py
import pandas as pd
data = {'Show': ['Stranger Things', 'The X-Files', 'Mandalorian', 'The Boys'],
'Streaming': ['Netflix', 'Fx', 'Disney Plus', 'Amazon Prime'],
'Season': [3, 12, 1, 2],
'Main Actor': ['Millie', 'Gillian', 'Pedro', 'Karl Urban']}
df = pd.DataFrame.from_dict(datae
# filtering data
filter = df["Show"] == "Mandalorian"
df.where(filter, inplace=True)
print(df)
输出
Show Streaming Season Main Actor
0 NaN NaN NaN NaN
1 NaN NaN NaN NaN
2 Mandalorian Disney Plus 1.0 Pedro
3 NaN NaN NaN NaN
在上面的例子中,where()方法的主要任务是检查DataFrame的一个条件,即 "show = Mandalorian",并返回相应的输出。默认情况下,如果行不满足一个条件,它将被填充为NaN值。
在我们的结果DataFrame中,只有具有Mandalorian值的行被返回,而其他的值都是NaN。
Pandas系列,其中
让我们使用Python range()函数创建一个系列,并使用where条件来获取所需的值:
# app.py
import pandas as pd
s = pd.Series(range(5))
s.where(s > 2, inplace=True)
print(s)
输出结果
0 NaN
1 NaN
2 NaN
3 3.0
4 4.0
dtype: float64
如输出所示,不满足值>2的每一行都被替换为NaN。
Pandas where:应用多个条件
要在pandas where()方法中应用多个条件,在条件之间使用&操作符。
如果一个条件失败,它将不会返回DataFrame的实际值。请看下面的代码:
# app.py
import pandas as pd
data = {'Show': ['Stranger Things', 'The X-Files', 'Mandalorian', 'The Boys'],
'Streaming': ['Netflix', 'Fx', 'Disney Plus', 'Amazon Prime'],
'Season': [3, 12, 1, 2],
'Main Actor': ['Millie', 'Gillian', 'Padro', 'Karl Urban']}
df = pd.DataFrame.from_dict(data)
# filtering data
filter = df["Show"] == "Stranger Things"
filter2 = df["Season"] == 3
df.where(filter & filter2, inplace=True)
print(df)
输出
Show Streaming Season Main Actor
0 Stranger Things Netflix 3.0 Millie
1 NaN NaN NaN NaN
2 NaN NaN NaN NaN
3 NaN NaN NaN NaN
如果一个条件不满足,它将返回NaN值:
# app.py
import pandas as pd
data = {'Show': ['Stranger Things', 'The X-Files', 'Mandalorian', 'The Boys'],
'Streaming': ['Netflix', 'Fx', 'Disney Plus', 'Amazon Prime'],
'Season': [3, 12, 1, 2],
'Main Actor': ['Millie', 'Gillian', 'Padro', 'Karl Urban']}
df = pd.DataFrame.from_dict(data)
# filtering data
filter = df["Show"] == "Stranger Things"
filter2 = df["Season"] == 12
df.where(filter & filter2, inplace=True)
print(df)
在这个例子中,第一个条件满足Show = Stranger Things,但是在filter2中,它不满足Stranger Things 节目有12季。
所以,它不会返回Stranger Things行和The X-Files行,因为这样第一个条件就不满足。所以,它将返回NaN值。
输出
Show Streaming Season Main Actor
0 NaN NaN NaN NaN
1 NaN NaN NaN NaN
2 NaN NaN NaN NaN
3 NaN NaN NaN NaN
你可以看到,由于一个条件的失败,它将返回一个有NaN值的DataFrame。
这就是Pandas DataFrame, where()函数的例子。