第 1.3 节 常见问题#
这一节收集了初学者用 Pandas 时最常卡的 10 个问题。每个问题都给出直接答案,能跑代码的都附上完整示例。
使用方式: 不用通读。遇到问题时用 Ctrl+F 搜关键词,直接跳到对应那条。等你把 5 章都学完再回头看,你会发现里面好多问题现在已经有答案了。
本课程使用的 Pandas 版本是
'3.1.0'
准备一下数据,下面每题都会用到:
import pandas as pd
data = {
"订单号": [1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008],
"下单日期": ["2024-01-05", "2024-01-08", "2024-01-12", "2024-02-03",
"2024-02-15", "2024-03-02", "2024-03-20", "2024-04-08"],
"城市": ["北京", "上海", "北京", "广州", "上海", "北京", "深圳", "广州"],
"商品": ["手机", "电脑", "耳机", "手机", "键盘", "显示器", "耳机", "手机"],
"销量": [2, 1, 3, 2, 5, 1, 4, 2],
"单价": [3999.0, 7999.0, 599.0, 3999.0, 299.0, 1299.0, 599.0, 3999.0],
"金额": [7998.0, 7999.0, 1797.0, 7998.0, 1495.0, 1299.0, 2396.0, 7998.0],
"客户评分": [4.5, 4.0, 4.8, 3.9, 4.2, 4.6, 4.1, 4.9],
}
df = pd.DataFrame(data)Q1:如何从字典、列表或 NumPy 数组创建 DataFrame?#
答案: 三种都传给 pd.DataFrame(),区别只在于「数据怎么排」。
字典——键是列名,值是这一列的数据:
df = pd.DataFrame({
"城市": ["北京", "上海"],
"销量": [2, 1],
})列表——每一行是一个列表,用 columns= 指定列名:
df = pd.DataFrame([
["北京", 2],
["上海", 1],
], columns=["城市", "销量"])字典的列表——每一行是一个字典,列名自动取所有键的并集:
df = pd.DataFrame([
{"城市": "北京", "销量": 2},
{"城市": "上海", "销量": 1},
])NumPy 数组——必须自己给列名,否则是 0, 1, 2:
import numpy as np
df = pd.DataFrame(np.array([[1, 2], [3, 4]]), columns=["a", "b"])一句话记忆: 数据是「一列一列」整理的 → 用字典;数据是「一行一行」记的 → 用列表或字典的列表。
Q2:如何查看 DataFrame 的行数、列数和整体形状?#
答案:
df.shape # (8, 8) 整体形状,元组
df.shape[0] # 8 行数
df.shape[1] # 8 列数
len(df) # 8 行数(对 DataFrame 而言)
df.size # 64 总元素数 = 行数 × 列数顺序别看反:shape 是「先行后列」,也就是「几行几列」,和数学里的矩阵一样。
Q3:如何获取 DataFrame 的所有列名?#
答案:
df.columns # Index 对象,带一层壳
df.columns.tolist() # 干净的 Python 列表,推荐输出:
['订单号', '下单日期', '城市', '商品', '销量', '单价', '金额', '客户评分']如果只是想在循环里用,df.columns 直接就够;如果要拿去做别的计算,tolist() 更顺手。