日常提数中需要一些方便的DataFrame刷选方式,数据量并不是很大,如常用于补充维表中的信息
1、可以使用布尔索引的方式进行筛选。
以字段名为 column_name,字段值为 a 为例,可以使用以下代码实现:
import pandas as pd
df = pd.DataFrame({'column_name': ['a', 'b', 'c', 'a', 'b', 'c'],
'other_column': ['A', 'B', 'C', 'A2', 'B2', 'C2']})
# 通过字段值等于 'a' 进行筛选
result_df = df[df['column_name'] == 'a']
# 输出结果
print(result_df)
---------------------------
column_name other_column
0 a A
3 a A2
---------------------------
如果要筛选多个条件的数据,可以使用逻辑运算符 &(与)、|(或)和 ~(非)进行组合。例如,如果要筛选 column_name 字段值等于 a 或 other_column的值为 B 的行,可以使用以下代码:
result_df = df[(df['column_name'] == 'a') | (df['other_column'] == 'B')]
# 输出结果
print(result_df)
---------------------------
column_name other_column
0 a A
1 b B
3 a A2
---------------------------
2、使用DataFrame的loc方法选择要筛选的列,并将筛选条件作为布尔表达式传递给该方法。
import pandas as pd
df = pd.DataFrame({'name': ['a', 'b', 'c', 'd', 'e', 'f'],
'age': [21, 14, 12, 5, 45, 23]})
# 选择age列中所有值大于等于18的行
result_df = df.loc[df['age'] >= 18]
# 输出结果
print(result_df)
--------------------
name age
0 a 21
4 e 45
5 f 23
--------------------
筛选多个条件,可以使用括号将每个条件括起来,并使用逻辑运算符(如&和|)组合起来。
# 选择age列中所有值大于等于18 且 name等于a 的行
result_df = df.loc[(df['age'] >= 18) & (df['name'] == 'a')]
# 输出结果
print(result_df)
------------------
name age
0 a 21
------------------
如果要选择特定列中具有特定值的行,可以使用isin()方法.例如需要name为b和f的行
result_df = df.loc[df['name'].isin(['b', 'f'])]
# 输出结果
print(result_df)
-----------------
name age
1 b 14
5 f 23
-----------------
注意,如果DataFrame非常大,则需要使用更高效的方法来处理数据,如使用查询(query)方法或使用NumPy的布尔索引技术。