Python中如何使用pandas的DataFrame实现数据筛选?
需求
有一个 df1 的 dataframe 数据,我如何实现数据筛选呢?
比如筛选出来 2018 年的数据行,如果再复杂一点的呢,比如 2018 年价格低于 2500 的行
下面是前 20 行的例子
数据:
>>> df1
pd_date price
0 2018 年 3 月 1499
1 2018 年 5 月 1398
2 2018 年 3 月 20 日 999
3 2018 年 8 月 29 日 3499
4 2017 年 9 月 30 日 2598
5 2017 年 6 月 16 日 1859
6 2018 年 3 月 28 日 2998
7 2017 年 12 月 29 日 1199
8 2018 年 7 月 3699
9 2017 年 2299
10 2018 年 9 月 2399
11 2017 年 12 月 26 日 880
12 2016 年 11 月 14 日 1788
13 2017 年 9 月 1 日 799
14 2018 年 7 月 7 日 1898
15 2018 年 9 月 1 日 2889
16 2018 年 5 月 3499
17 2016 年 11 月 1099
18 2018 年 5 月 3199
19 2017 年 12 月 1499
20 2017 年 9 月 5199
Python中如何使用pandas的DataFrame实现数据筛选?
5 回复
df.where
import pandas as pd
# 创建示例DataFrame
data = {
'姓名': ['张三', '李四', '王五', '赵六', '钱七'],
'年龄': [25, 32, 28, 35, 22],
'部门': ['技术部', '销售部', '技术部', '人事部', '销售部'],
'薪资': [8000, 6500, 9000, 5500, 7000]
}
df = pd.DataFrame(data)
# 1. 基本条件筛选
# 筛选年龄大于30岁的员工
df_age_30 = df[df['年龄'] > 30]
print("年龄大于30岁的员工:")
print(df_age_30)
# 2. 多条件筛选
# 筛选技术部且薪资大于8000的员工
df_tech_high = df[(df['部门'] == '技术部') & (df['薪资'] > 8000)]
print("\n技术部薪资大于8000的员工:")
print(df_tech_high)
# 3. 使用query方法
df_query = df.query('年龄 >= 25 and 部门 in ["技术部", "销售部"]')
print("\n年龄≥25且在技术部或销售部的员工:")
print(df_query)
# 4. 字符串筛选
# 筛选姓名包含"三"的员工
df_name = df[df['姓名'].str.contains('三')]
print("\n姓名包含'三'的员工:")
print(df_name)
# 5. isin筛选
# 筛选部门为技术部或销售部
df_dept = df[df['部门'].isin(['技术部', '销售部'])]
print("\n技术部或销售部的员工:")
print(df_dept)
# 6. 使用loc进行筛选
df_loc = df.loc[(df['年龄'] > 25) & (df['薪资'] < 8000), ['姓名', '部门']]
print("\n年龄>25且薪资<8000的员工姓名和部门:")
print(df_loc)
# 7. 筛选特定列
# 只显示满足条件的姓名和薪资列
df_cols = df[df['年龄'] > 25][['姓名', '薪资']]
print("\n年龄>25的员工姓名和薪资:")
print(df_cols)
核心要点:
- 单条件用
df[条件] - 多条件用
&(与)、|(或),注意括号 query()适合复杂条件,语法更直观str.contains()处理字符串模糊匹配isin()匹配多个值loc可同时筛选行和列
总结建议: 根据需求选择合适方法,多条件注意括号优先级。
year_list = []
for date in df1[‘pd_date’].tolist():
date =date[:4]
year_list.append(date)
df1[‘year’] = pd.Series(year_list)
筛选出来 2018 年的数据行= df1[df1[‘year’]==‘2018’]
2018 年价格低于 2500 的行=df1[(df1[‘year’]==‘2018’) & (df1[‘price’]<2500)]
利用 PythonPython 进行数据分析.epub
df1[(df1[‘pd_date’].str[:4]==‘2018’)&(df1[‘price’]<2500)]

