🔹 DA9:2020年毕业且使用Java的用户
📌 题目描述
筛选出 2020年毕业 且 常用语言为 Java 的用户,输出他们的全部信息,并设置显示选项以完整显示数据。
✅ 正确代码
import pandas as pd
# 读取数据
Nowcoder = pd.read_csv('Nowcoder.csv', sep=',')
# 设置显示选项
pd.set_option('display.width', 300) # 字符显示宽度
pd.set_option('display.max_rows', None) # 显示所有行
pd.set_option('display.max_columns', None) # 显示所有列
# 方法1:布尔索引(推荐)
result = Nowcoder[(Nowcoder['Graduate_year'] == 2020) & (Nowcoder['Language'] == 'Java')]
# 方法2:使用 query(更清晰)
# result = Nowcoder.query("Graduate_year == 2020 and Language == 'Java'")
print(result)
💡 扩展知识
技术点 | 说明 |
---|---|
& 操作符 |
表示"与"(and),必须加括号 :(A) & (B) |
query() 方法 |
支持字符串表达式,可读性强,支持 and /or /in |
pd.set_option() |
控制 Pandas 输出格式,避免 ... 或换行 |
== 比较 |
注意数据类型:2020 (int) vs '2020' (str) |
✅ 推荐使用
query()
处理复杂条件,代码更易读。
🔹 DA9:筛选 C 系语言用户(C/C++/C#)
📌 题目描述
筛选出使用 C++、C 或 C# 的用户,输出他们的全部信息。
✅ 正确代码
import pandas as pd
# 读取数据
df = pd.read_csv('Nowcoder.csv', sep=',')
# 设置显示选项
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
pd.set_option('display.width', None)
# 使用 isin() 筛选多个值(推荐)
result = df[df['Language'].isin(['C++', 'C', 'C#'])]
# 注意:'CPP' 应为 'C++',检查数据真实值
# 可先查看:print(df['Language'].unique())
print(result)
💡 扩展知识
方法 | 说明 |
---|---|
.isin(list) |
判断某列值是否在给定列表中,天然支持"或"逻辑 ✅ |
替代写法 | `(A) |
数据清洗 | 使用 .str.strip() 去空格,.str.lower() 统一大小写 |
unique() |
查看列中唯一值,排查拼写问题 |
✅
isin()
是处理"多选一"场景的最佳实践。
🔹 DA10:刷题量 ≥500 的用户等级与成就值
📌 题目描述
筛选出刷题量不低于 500 的用户,输出他们的 等级(Level) 和 成就值(Achievement_value)。
✅ 正确代码
import pandas as pd
# 读取数据
Nowcoder = pd.read_csv('Nowcoder.csv', sep=',')
# 筛选刷题量 >= 500 的用户
df = Nowcoder[Nowcoder['Num_of_exercise'] >= 500]
# 输出指定两列
print(df[['Level', 'Achievement_value']])
💡 扩展知识
技术点 | 说明 |
---|---|
df[['col1', 'col2']] |
选择多列,双层中括号 |
链式索引风险 | df[cond]['col'] 可能触发 SettingWithCopyWarning |
推荐写法 | df.loc[cond, ['Level', 'Achievement_value']] 更安全 |
数据类型 | 确保 Num_of_exercise 是数值型(int/float) |
✅ 安全写法:
print(Nowcoder.loc[Nowcoder['Num_of_exercise'] >= 500, ['Level', 'Achievement_value']])
🔹 DA11:筛选非2018年毕业的 C++ 7级用户
📌 题目描述
筛选出 语言为 C++、等级为 7 的用户,再从中排除 2018年毕业 的用户,输出全部信息。
✅ 正确代码
import pandas as pd
# 读取数据
Nowcoder = pd.read_csv('Nowcoder.csv', sep=',')
# 设置显示选项
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
pd.set_option('display.width', None)
# 方法1:分步筛选
df = Nowcoder[(Nowcoder['Language'] == 'C++') & (Nowcoder['Level'] == 7)]
result = df[df['Graduate_year'] != 2018]
# 方法2:一步完成(推荐)
# result = Nowcoder.query("Language == 'C++' and Level == 7 and Graduate_year != 2018")
print(result)
💡 扩展知识
技术点 | 说明 |
---|---|
!= |
"不等于"操作符,用于排除特定值 |
多条件组合 | 使用 & (与)、` |
括号重要性 | 每个条件必须加括号:(A) & (B) & (C) |
query() 优势 |
支持 != 、!= 、in 、not in ,逻辑清晰 |
✅ 推荐使用
query()
处理复杂条件:
Nowcoder.query("Language == 'C++' and Level == 7 and Graduate_year != 2018")
🎯 总结:Pandas 核心筛选技巧速查
操作 | 推荐方法 |
---|---|
单条件筛选 | df[cond] |
多条件"与" | (A) & (B) 或 query("A and B") |
多条件"或" | `(A) |
"不等于" | != |
选择多列 | df[['col1', 'col2']] 或 df.loc[:, ['col1', 'col2']] |
避免链式索引 | 优先使用 loc |
显示全部数据 | pd.set_option('display.max_columns', None) 等 |