Pandas 是 Python 中最流行、最强大的数据处理和分析库,专门用来处理表格和结构化数据。它让数据清洗、转换、统计分析和可视化变得简单高效,适合数据科学、金融分析、机器学习等多个领域。下面用最基础的知识点和丰富的示例,帮你快速掌握Pandas的核心功能。
1. Pandas的核心数据结构
- Series(一维数据)
类似带标签的一维数组,比如一列数据。 - DataFrame(二维表格数据)
类似Excel表格或SQL表,有行索引和列索引,每列可以是不同类型(数字、字符串等)。
示例:创建一个简单的DataFrame
import pandas as pd
data = {
"姓名": ["张三", "李四", "王五"],
"年龄": [28, 34, 29],
"性别": ["男", "女", "男"]
}
df = pd.DataFrame(data)
print(df)
输出:
| 姓名 | 年龄 | 性别 | |
|---|---|---|---|
| 0 | 张三 | 28 | 男 |
| 1 | 李四 | 34 | 女 |
| 2 | 王五 | 29 | 男 |
2. 读取和保存数据
Pandas支持多种数据格式的读写,最常用的是CSV和Excel。
读取CSV文件
df = pd.read_csv("data.csv") # 读取CSV文件
保存为Excel文件
df.to_excel("output.xlsx", index=False) # 保存为Excel,不保存行索引
3. 数据查看与基本操作
- 查看前几行数据:
df.head(5) - 查看数据维度:
df.shape - 查看列信息和数据类型:
df.info() - 统计描述(均值、中位数等):
df.describe()
示例
print(df.head()) # 显示前5行
print(df.shape) # 显示行数和列数
print(df.info()) # 显示列名和数据类型
print(df.describe()) # 数值列的统计信息
4. 数据清洗基础
数据分析前,通常要处理缺失值、重复数据和格式转换。
处理缺失值
- 删除含缺失值的行:
df.dropna(inplace=True) - 用指定值填充缺失:
df.fillna(0, inplace=True)
删除重复行
df.drop_duplicates(inplace=True)
转换数据类型
df["日期"] = pd.to_datetime(df["日期"]) # 转换为日期类型
df["年龄"] = df["年龄"].astype(int) # 转换为整数
5. 数据筛选与分组
筛选数据
# 选择年龄大于30的行
df_filtered = df[df["年龄"] > 30]
分组统计
# 按性别分组,计算平均年龄
grouped = df.groupby("性别")["年龄"].mean()
print(grouped)
6. 新增计算列
可以基于已有列计算新列。
df["总价"] = df["数量"] * df["单价"]
7. 数据排序
# 按年龄降序排序
df_sorted = df.sort_values(by="年龄", ascending=False)
8. 数据合并与连接
- 合并(merge) :类似SQL中的JOIN
- 连接(concat) :上下或左右拼接数据
示例:合并两个DataFrame
df1 = pd.DataFrame({"ID": [1, 2], "姓名": ["张三", "李四"]})
df2 = pd.DataFrame({"ID": [1, 2], "成绩": [90, 85]})
df_merged = pd.merge(df1, df2, on="ID")
print(df_merged)
9. 时间序列处理
Pandas对时间数据支持很好。
创建时间序列
dates = pd.date_range(start="2023-01-01", periods=5)
df = pd.DataFrame({"日期": dates, "值": [10, 20, 15, 30, 25]})
df.set_index("日期", inplace=True)
print(df)
重采样(按月求和)
python
monthly_sum = df.resample("M").sum()
print(monthly_sum)
10. 简单数据可视化
Pandas内置绘图功能,基于Matplotlib。
import matplotlib.pyplot as plt
df["年龄"].plot(kind="hist", bins=5, title="年龄分布")
plt.show()
11. 机器学习数据准备示例
from sklearn.preprocessing import MinMaxScaler
# 假设df有数值列"收入"
scaler = MinMaxScaler()
df["收入归一化"] = scaler.fit_transform(df[["收入"]])
# 类别变量独热编码
df = pd.get_dummies(df, columns=["性别"])
12. 处理大数据集的技巧
- 使用
chunksize分块读取大文件,避免内存溢出 - 优化数据类型,如将int64转为int32,字符串转为category类型,节省内存
- 使用向量化操作,避免循环,提高速度
- 利用第三方库Dask或Swifter实现并行加速
分块读取示例
chunks = pd.read_csv("large_data.csv", chunksize=100000)
for chunk in chunks:
print(chunk.head())
数据类型优化示例
df["id"] = df["id"].astype("int32")
df["类别"] = df["类别"].astype("category")
综合示例:电商销售数据分析
import pandas as pd
import matplotlib.pyplot as plt
from io import StringIO
data = """日期,商品,数量,单价
2024-01-01,手机,10,3000
2024-01-02,耳机,15,200
2024-01-03,电脑,5,5000
2024-01-04,手机,8,3000
2024-01-05,耳机,20,200"""
df = pd.read_csv(StringIO(data))
df["日期"] = pd.to_datetime(df["日期"])
df["销售额"] = df["数量"] * df["单价"]
# 总销售额
total_sales = df["销售额"].sum()
print(f"总销售额: {total_sales} 元")
# 最畅销商品(按销售额)
best_selling = df.groupby("商品")["销售额"].sum().idxmax()
print(f"最畅销商品: {best_selling}")
# 按日期绘制销售额柱状图
daily_sales = df.groupby("日期")["销售额"].sum()
daily_sales.plot(kind="bar", title="每日销售额")
plt.xlabel("日期")
plt.ylabel("销售额(元)")
plt.show()
通过以上内容,你可以掌握Pandas的基础知识和常用操作,轻松开始用Python进行数据处理和分析。Pandas让数据工作变得简单、高效,是数据科学和机器学习领域不可或缺的工具。