Python Pandas 快速入门指南
Python Pandas 是一个强大的数据处理和分析库,它提供了高性能、易于使用的数据结构和数据分析工具。无论你是数据科学新手还是经验丰富的开发者,掌握 Pandas 都能极大地提升你的数据操作效率。本指南将带你快速入门 Pandas 的核心概念和常用操作。
1. 什么是 Pandas?
Pandas 的核心是两种数据结构:
- Series (序列):一维带标签的数组,可以存储任何数据类型(整数、字符串、浮点数、Python 对象等)。它由数据和与之关联的标签(索引)组成。
- DataFrame (数据帧):二维带标签的数据结构,可以看作是 Series 对象的集合,其中每个 Series 共享相同的索引。它类似于电子表格或 SQL 表,有行和列,每列可以是不同的数据类型。
2. 安装 Pandas
如果你还没有安装 Pandas,可以通过 pip 轻松安装:
bash
pip install pandas openpyxl matplotlib seaborn
我们还安装了 openpyxl(用于读写 Excel 文件)、matplotlib 和 seaborn(用于数据可视化,在实际数据分析中常常与 Pandas 结合使用)。
3. 导入 Pandas
在你的 Python 脚本或 Jupyter Notebook 中,通常会这样导入 Pandas:
python
import pandas as pd
pd 是 Pandas 约定俗成的别名。
4. Series 快速入门
4.1 创建 Series
“`python
import pandas as pd
从列表创建 Series
s = pd.Series([1, 3, 5, 7, 9])
print(“Series from list:”)
print(s)
默认索引从 0 开始
从列表创建 Series,并指定索引
s_indexed = pd.Series([10, 20, 30, 40], index=[‘a’, ‘b’, ‘c’, ‘d’])
print(“\nSeries with custom index:”)
print(s_indexed)
从字典创建 Series
data_dict = {‘apple’: 100, ‘banana’: 200, ‘cherry’: 300}
s_dict = pd.Series(data_dict)
print(“\nSeries from dictionary:”)
print(s_dict)
“`
4.2 访问 Series 元素
你可以通过位置索引或标签索引访问 Series 元素:
python
print("\nAccessing Series elements:")
print(s[0]) # 按位置访问
print(s_indexed['b']) # 按标签访问
print(s_dict['banana'])
4.3 Series 运算
Series 支持各种数值运算:
python
s1 = pd.Series([1, 2, 3])
s2 = pd.Series([4, 5, 6])
print("\nSeries addition:")
print(s1 + s2)
5. DataFrame 快速入门
DataFrame 是 Pandas 中最常用的数据结构。
5.1 创建 DataFrame
“`python
import pandas as pd
从字典创建 DataFrame
data = {
‘Name’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘David’],
‘Age’: [25, 30, 35, 40],
‘City’: [‘New York’, ‘Paris’, ‘London’, ‘Tokyo’]
}
df = pd.DataFrame(data)
print(“DataFrame from dictionary:”)
print(df)
从字典列表创建 DataFrame
data_list = [
{‘Name’: ‘Eve’, ‘Age’: 22, ‘City’: ‘Rome’},
{‘Name’: ‘Frank’, ‘Age’: 28, ‘City’: ‘Berlin’}
]
df_list = pd.DataFrame(data_list)
print(“\nDataFrame from list of dictionaries:”)
print(df_list)
指定索引和列名
df_custom = pd.DataFrame({
‘col1’: [1, 2],
‘col2’: [3, 4]
}, index=[‘row1’, ‘row2’])
print(“\nDataFrame with custom index and columns:”)
print(df_custom)
“`
5.2 查看 DataFrame 信息
“`python
print(“\nDataFrame head (first 5 rows):”)
print(df.head()) # 查看前5行
print(“\nDataFrame tail (last 5 rows):”)
print(df.tail(2)) # 查看最后2行
print(“\nDataFrame info:”)
df.info() # 查看数据类型、非空值数量等
print(“\nDataFrame descriptive statistics:”)
print(df.describe()) # 快速统计概览(仅限数值列)
print(“\nDataFrame columns:”)
print(df.columns) # 列名
print(“\nDataFrame index:”)
print(df.index) # 行索引
“`
5.3 选择数据
选择列
“`python
print(“\nSelect ‘Name’ column:”)
print(df[‘Name’]) # 返回 Series
print(“\nSelect ‘Name’ and ‘Age’ columns:”)
print(df[[‘Name’, ‘Age’]]) # 返回 DataFrame
“`
选择行(使用 loc 和 iloc)
loc:基于标签(label)选择行或列。iloc:基于整数位置(integer location)选择行或列。
“`python
print(“\nSelect row by label (index 0):”)
print(df.loc[0])
print(“\nSelect row by position (index 1):”)
print(df.iloc[1])
print(“\nSelect rows 0 to 2 (exclusive for iloc):”)
print(df.iloc[0:3])
print(“\nSelect rows with custom index ‘row1’:”)
print(df_custom.loc[‘row1’])
print(“\nSelect specific cell (row 0, ‘Name’):”)
print(df.loc[0, ‘Name’])
print(df.iloc[0, 0])
“`
5.4 过滤数据
使用布尔索引进行数据过滤:
“`python
print(“\nFilter: People older than 30:”)
print(df[df[‘Age’] > 30])
print(“\nFilter: People in ‘New York’ or ‘London’:”)
print(df[(df[‘City’] == ‘New York’) | (df[‘City’] == ‘London’)])
“`
5.5 添加/修改/删除列
“`python
添加新列
df[‘Salary’] = [50000, 60000, 75000, 80000]
print(“\nDataFrame after adding ‘Salary’ column:”)
print(df)
修改列
df[‘Age’] = df[‘Age’] + 1
print(“\nDataFrame after incrementing ‘Age’ by 1:”)
print(df)
删除列
df_dropped = df.drop(columns=[‘Salary’])
print(“\nDataFrame after dropping ‘Salary’ column:”)
print(df_dropped)
“`
5.6 处理缺失数据
缺失值通常表示为 NaN (Not a Number)。
“`python
import numpy as np
df_missing = pd.DataFrame({
‘A’: [1, 2, np.nan],
‘B’: [4, np.nan, 6],
‘C’: [7, 8, 9]
})
print(“\nDataFrame with missing values:”)
print(df_missing)
print(“\nCheck for null values:”)
print(df_missing.isnull())
填充缺失值
df_filled = df_missing.fillna(0)
print(“\nDataFrame after filling NaN with 0:”)
print(df_filled)
删除含有缺失值的行
df_dropped_rows = df_missing.dropna()
print(“\nDataFrame after dropping rows with NaN:”)
print(df_dropped_rows)
“`
5.7 分组与聚合
groupby() 是 Pandas 中一个非常强大的功能。
“`python
data_agg = {
‘City’: [‘New York’, ‘Paris’, ‘New York’, ‘London’, ‘Paris’],
‘Product’: [‘A’, ‘B’, ‘A’, ‘C’, ‘B’],
‘Sales’: [100, 150, 120, 80, 200]
}
df_agg = pd.DataFrame(data_agg)
print(“\nOriginal DataFrame for aggregation:”)
print(df_agg)
按城市分组并计算总销售额
print(“\nTotal Sales by City:”)
print(df_agg.groupby(‘City’)[‘Sales’].sum())
按城市和产品分组并计算平均销售额
print(“\nAverage Sales by City and Product:”)
print(df_agg.groupby([‘City’, ‘Product’])[‘Sales’].mean())
“`
6. 从文件读写数据
Pandas 支持多种文件格式,如 CSV, Excel, SQL 数据库等。
“`python
创建一个示例 CSV 文件
example_data = {
‘ID’: [1, 2, 3],
‘Value’: [‘X’, ‘Y’, ‘Z’]
}
df_example = pd.DataFrame(example_data)
df_example.to_csv(‘example.csv’, index=False) # index=False 不写入行索引
读取 CSV 文件
df_csv = pd.read_csv(‘example.csv’)
print(“\nDataFrame read from ‘example.csv’:”)
print(df_csv)
写入 Excel 文件
df.to_excel(‘output.xlsx’, index=False)
读取 Excel 文件
df_excel = pd.read_excel(‘output.xlsx’)
print(“\nDataFrame read from ‘output.xlsx’:”)
print(df_excel)
清理生成的临时文件
import os
os.remove(‘example.csv’)
os.remove(‘output.xlsx’)
“`
7. 常用数据操作
- 排序:
sort_values(),sort_index() - 去重:
drop_duplicates() - 合并/连接:
merge(),concat() - 应用函数:
apply()(用于 Series 或 DataFrame 的行/列),map()(用于 Series),applymap()(用于 DataFrame 元素)
“`python
排序
print(“\nDataFrame sorted by Age:”)
print(df.sort_values(by=’Age’, ascending=False)) # 降序
去重(假设有重复行)
df_dup = pd.DataFrame({‘col1’: [1, 2, 1], ‘col2’: [‘A’, ‘B’, ‘A’]})
print(“\nDataFrame with duplicates:”)
print(df_dup)
print(“\nDataFrame after dropping duplicates:”)
print(df_dup.drop_duplicates())
合并(简单示例)
df1 = pd.DataFrame({‘key’: [‘K0’, ‘K1’], ‘value1’: [1, 2]})
df2 = pd.DataFrame({‘key’: [‘K0’, ‘K1’], ‘value2′: [3, 4]})
merged_df = pd.merge(df1, df2, on=’key’)
print(“\nMerged DataFrame:”)
print(merged_df)
应用函数
df[‘Age_Squared’] = df[‘Age’].apply(lambda x: x**2)
print(“\nDataFrame with ‘Age_Squared’ column:”)
print(df)
“`
8. 结合 Matplotlib/Seaborn 进行可视化
Pandas 对象与 Matplotlib 或 Seaborn 结合使用非常方便。
“`python
import matplotlib.pyplot as plt
import seaborn as sns
创建一些数据
data_plot = {
‘Category’: [‘A’, ‘B’, ‘C’, ‘D’, ‘E’],
‘Value’: [10, 25, 15, 30, 20]
}
df_plot = pd.DataFrame(data_plot)
Pandas 内置绘图
df_plot.plot(kind=’bar’, x=’Category’, y=’Value’, title=’Bar Plot using Pandas’)
plt.show()
使用 Seaborn 绘制散点图
sns.scatterplot(x=’Age’, y=’Salary’, data=df)
plt.title(‘Age vs Salary Scatter Plot’)
plt.show()
“`
总结
本指南带你了解了 Pandas 的基本数据结构(Series 和 DataFrame)、创建、查看、选择、过滤、处理缺失值、分组聚合以及数据读写等核心操作。这只是 Pandas 强大功能的冰山一角,但已足以让你开始进行基本的数据分析工作。
要深入学习 Pandas,建议查阅官方文档、完成在线教程,并通过实际项目不断练习。数据分析的旅程才刚刚开始,祝你学习愉快!