在本指南中,你将看到在 Pandas DataFrame中应用IF条件的5种不同方法。
具体来说,你将看到
Pandas DataFrame应用IF条件的方法:
- 一组数字
- 一组数字和 lambda
- 字符串
- 字符串和 Lambada
- 或条件
在 Pandas DataFrame中应用IF条件
现在让我们回顾以下 5 个案例:
(1) IF 条件 – 一组数字
Pandas DataFrame如何使用IF条件?假设你在 Python中创建了一个具有 10 个数字(从 1 到 10)的 DataFrame。然后,你要应用以下 IF 条件:
- 如果数字等于或小于 4,则赋值为 'True'
- 否则,如果数字大于4,则赋值为 'False'
这是你可以用来创建 IF 条件的一般结构:
df.loc[df['column name'] condition, 'new column name'] = 'value if condition is met'
对于我们的
Pandas DataFrame IF条件用法示例,Python 代码如下所示:
import pandas as pd
numbers = {'set_of_numbers': [1,2,3,4,5,6,7,8,9,10]}
df = pd.DataFrame(numbers,columns=['set_of_numbers'])
df.loc[df['set_of_numbers'] <= 4, 'equal_or_lower_than_4?'] = 'True'
df.loc[df['set_of_numbers'] > 4, 'equal_or_lower_than_4?'] = 'False'
print (df)
这是你将在 Python 中得到的结果:
set_of_numbers equal_or_lower_than_4?
0 1 True
1 2 True
2 3 True
3 4 True
4 5 False
5 6 False
6 7 False
7 8 False
8 9 False
9 10 False
(2) IF 条件 – 一组数字和 lambda
你现在将看到如何通过使用
Lambada获得与案例 1 相同的结果
,其中条件是:
- 如果数字等于或小于 4,则赋值为 'True'
- 否则,如果数字大于4,则赋值为 'False'
这是你可以在 Python 中应用的通用结构:
df['new column name'] = df['column name'].apply(lambda x: 'value if condition is met' if x condition else 'value if condition is not met')
对于我们的
Pandas DataFrame IF条件用法示例:
import pandas as pd
numbers = {'set_of_numbers': [1,2,3,4,5,6,7,8,9,10]}
df = pd.DataFrame(numbers,columns=['set_of_numbers'])
df['equal_or_lower_than_4?'] = df['set_of_numbers'].apply(lambda x: 'True' if x <= 4 else 'False')
print (df)
这是你将得到的结果,与案例 1 匹配:
set_of_numbers equal_or_lower_than_4?
0 1 True
1 2 True
2 3 True
3 4 True
4 5 False
5 6 False
6 7 False
7 8 False
8 9 False
9 10 False
(3) IF 条件——字符串
现在,让我们创建一个仅包含具有 4 个
名称的字符串/文本的 DataFrame :Jon、Bill、Maria 和 Emma。
条件是:
- 如果名称等于'Bill',则分配值 'Match'
- 否则,如果名称不是 'Bill',则分配值 'Mismatch'
import pandas as pd
names = {'first_name': ['Jon','Bill','Maria','Emma']}
df = pd.DataFrame(names,columns=['first_name'])
df.loc[df['first_name'] == 'Bill', 'name_match'] = 'Match'
df.loc[df['first_name'] != 'Bill', 'name_match'] = 'Mismatch'
print (df)
运行上述 Python 代码后,你将看到:
first_name name_match
0 Jon Mismatch
1 Bill Match
2 Maria Mismatch
3 Emma Mismatch
(4) IF 条件——字符串和lambda
Pandas DataFrame应用IF条件的方法:使用
lambda,你将获得与情况 3 相同的结果
:
import pandas as pd
names = {'first_name': ['Jon','Bill','Maria','Emma']}
df = pd.DataFrame(names,columns=['first_name'])
df['name_match'] = df['first_name'].apply(lambda x: 'Match' if x == 'Bill' else 'Mismatch')
print (df)
这是 Python 的输出:
first_name name_match
0 Jon Mismatch
1 Bill Match
2 Maria Mismatch
3 Emma Mismatch
(5) IF 条件与 OR
Pandas DataFrame如何使用IF条件?在最后一种情况下,让我们应用以下条件:
- 如果名称是“Bill” 或“Emma”,则分配“Match”的值
- 否则,如果名称既不是 'Bill' 也不是 'Emma',则赋值为 'Mismatch'
Pandas DataFrame IF条件用法示例如下:
import pandas as pd
names = {'first_name': ['Jon','Bill','Maria','Emma']}
df = pd.DataFrame(names,columns=['first_name'])
df.loc[(df['first_name'] == 'Bill') | (df['first_name'] == 'Emma'), 'name_match'] = 'Match'
df.loc[(df['first_name'] != 'Bill') & (df['first_name'] != 'Emma'), 'name_match'] = 'Mismatch'
print (df)
运行 Python 代码,你将得到以下结果:
first_name name_match
0 Jon Mismatch
1 Bill Match
2 Maria Mismatch
3 Emma Match
在现有DataFrame 列下应用 IF 条件
到目前为止,你已经了解了如何通过创建新列来应用 IF 条件。
或者,你可以将结果存储在
现有的DataFrame 列下。
Pandas DataFrame应用IF条件的方法:例如,假设你创建了一个包含 12 个数字的 DataFrame,其中最后两个数字为零:
'set_of_numbers': [1,2,3,4,5,6,7,8,9,10, 0 , 0 ]
然后,你可以应用以下 IF 条件,然后将结果存储在
现有的“set_of_numbers”列下:
- 如果数字等于 0,则将值更改为 999
- 如果数字等于 5,则将值更改为 555
import pandas as pd
numbers = {'set_of_numbers': [1,2,3,4,5,6,7,8,9,10,0,0]}
df = pd.DataFrame(numbers,columns=['set_of_numbers'])
print (df)
df.loc[df['set_of_numbers'] == 0, 'set_of_numbers'] = 999
df.loc[df['set_of_numbers'] == 5, 'set_of_numbers'] = 555
print (df)
以下是之前和之后的结果,在现有的“set_of_numbers”列下,“5”变为“555”,“0”变为“999”:
前:
set_of_numbers
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
10 0
11 0
后:
set_of_numbers
0 1
1 2
2 3
3 4
4 555
5 6
6 7
7 8
8 9
9 10
10 999
11 999
在另一个实例中,你可能有一个包含NaN 值的 DataFrame 。然后,你可以应用 IF 条件将这些值替换为 zeros,如下例所示:
import pandas as pd
import numpy as np
numbers = {'set_of_numbers': [1,2,3,4,5,6,7,8,9,10,np.nan,np.nan]}
df = pd.DataFrame(numbers,columns=['set_of_numbers'])
print (df)
df.loc[df['set_of_numbers'].isnull(), 'set_of_numbers'] = 0
print (df)
在你看到 NaN 值之前,以及在你看到零值之后:
前:
set_of_numbers
0 1.0
1 2.0
2 3.0
3 4.0
4 5.0
5 6.0
6 7.0
7 8.0
8 9.0
9 10.0
10 NaN
11 NaN
后:
set_of_numbers
0 1.0
1 2.0
2 3.0
3 4.0
4 5.0
5 6.0
6 7.0
7 8.0
8 9.0
9 10.0
10 0.0
11 0.0
结论
Pandas DataFrame如何使用IF条件?你刚刚看到了如何在Pandas DataFrame中应用IF条件。在 Python 中确实有多种方法可以应用这样的条件。你可以通过使用
Lambada 或仅坚持使用 Pandas来获得相同的结果。
最后,它归结为使用最适合你需求的方法。
最后,你可能需要查看以下外部资源以获取有关
Pandas DataFrame 的其他信息。