Python 数据分析学习笔记:Pandas 逻辑运算

🔹 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() 优势 支持 !=!=innot 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)