Python 数据分析学习笔记:Pandas 数据索引
🔹 DA5:检查数据是否有缺失值
📌 题目描述
检查 Nowcoder.csv
文件中每一列是否存在空值(缺失数据),输出每列是否有空值。
✅ 正确代码
import pandas as pd# 读取数据
n = pd.read_csv('Nowcoder.csv', sep=',', dtype=object)# 输出每列是否有空值(True 表示有空值)
print(n.isnull().any())
💡 扩展知识
方法 | 说明 |
---|---|
df.isnull() | 返回布尔 DataFrame,True 表示该位置为空 |
df.notnull() | 与 isnull() 相反 |
df.isnull().any() | 每列是否有至少一个空值(返回 Series) |
df.isnull().sum() | 每列空值数量统计(推荐用于分析) |
df.dropna() | 删除含空值的行或列 |
df.fillna(value) | 填充空值 |
✅ 建议:实际分析中用
df.isnull().sum()
更直观。
🔹 DA6:筛选使用 Python 的用户
📌 题目描述
筛选出常用语言为 Python 的用户,并输出他们的全部信息。
✅ 正确代码
import pandas as pd# 读取数据(推荐加 dtype=object 防止类型问题)
n = pd.read_csv('Nowcoder.csv', sep=',', dtype=object)# 筛选 Language 为 'Python' 的行
print(n[n['Language'] == 'Python'])
💡 扩展知识
- 布尔索引:
df[condition]
是 Pandas 最常用的筛选方式。 - 字符串匹配注意:
- 大小写敏感:
'python' != 'Python'
- 空格问题:
'Python ' != 'Python'
- 大小写敏感:
- 推荐增强写法:
n['Language'] = n['Language'].str.strip() # 去空格 result = n[n['Language'] == 'Python']
🔹 DA7:查看 Python 用户的成就值
📌 题目描述
输出使用 Python 的用户的“成就值”(Achievement_value)这一列。
✅ 正确代码
import pandas as pd# 读取数据(注意:如果要做数值计算,不要用 dtype=object)
n = pd.read_csv('Nowcoder.csv', sep=',')# 筛选 Python 用户,并取成就值列
print(n[n['Language'] == 'Python']['Achievement_value'])
💡 扩展知识
写法 | 说明 |
---|---|
df['col1']['col2'] | 链式索引,不推荐,可能返回 SettingWithCopyWarning |
df.loc[condition, 'col'] | 推荐写法,更安全 |
df.query("Language == 'Python'")['Achievement_value'] | 使用 query,可读性强 |
✅ 推荐写法:
print(n.loc[n['Language'] == 'Python', 'Achievement_value'])
⚠️ 如果你用了
dtype=object
,Achievement_value
是字符串,不能做数值计算。需要时用.astype(int)
转换。
🔹 DA8:查看最后 5 行用户的部分数据
📌 题目描述
输出文件最后 5 行用户的 Nowcoder_ID
、Level
、Achievement_value
、Language
。
✅ 正确代码
import pandas as pd# 读取数据
data = pd.read_csv("Nowcoder.csv")# 使用 iloc 取最后 5 行,并选择指定列
print(data.iloc[-5:][['Nowcoder_ID', 'Level', 'Achievement_value', 'Language']])
💡 扩展知识
索引方式 | 说明 |
---|---|
iloc | 按位置索引,支持负数(-1 表示最后一行) |
loc | 按标签索引(如行名、列名) |
data.iloc[-5:] | 最后 5 行(从倒数第 5 行到末尾) |
data.tail(5) | 与 iloc[-5:] 等价,更简洁 |
✅ 等价写法:
print(data.tail(5)[['Nowcoder_ID', 'Level', 'Achievement_value', 'Language']])
✅
tail(n)
比iloc[-n:]
更直观,推荐用于查看末尾数据。
🎯 总结:Pandas 核心操作速查表
操作 | 方法 |
---|---|
读取 CSV | pd.read_csv('file.csv') |
查看空值 | df.isnull().any() 或 df.isnull().sum() |
筛选行 | df[condition] 或 df.query("cond") |
筛选列 | df[['col1', 'col2']] |
复合条件 | (A) & (B) (注意括号) |
字符串处理 | .str.strip() 、.str.lower() |
位置索引 | iloc[i:j] (行)、iloc[:, k:l] (列) |
查看末尾 | df.tail(n) |
安全索引 | df.loc[condition, ['col1', 'col2']] |
✅ 学习建议
- 先看数据:用
print(df.head())
和print(df.dtypes)
了解数据结构。 - 处理脏数据:去空格、统一大小写、处理缺失值。
- 类型一致:数值列不要用
dtype=object
,除非你只做筛选。 - 避免链式索引:用
loc
替代df[cond]['col']
。 - 多用
query
和isin
:代码更清晰。