Pandas教程:Python数据分析入门指南 – wiki基地

Pandas教程:Python数据分析入门指南

在当今数据驱动的世界中,Python 已成为数据分析领域的基石。而 Pandas 库,更是 Python 数据分析工具箱中不可或缺的利器。本教程将带你深入了解 Pandas,从基础概念到常用操作,助你踏上 Python 数据分析之旅。


1. Pandas 简介

什么是 Pandas?

Pandas 是一个开源的 Python 库,专为数据操作和分析而设计。它提供了高性能、易于使用的数据结构和数据分析工具,是处理结构化(表格型)数据的理想选择。 “Pandas” 这个名字来源于 “Panel Data”(面板数据)和 “Python Data Analysis”(Python 数据分析)。

为什么要使用 Pandas?

  • 高效处理结构化数据:无论是表格数据、时间序列数据还是任意矩阵数据,Pandas 都能高效地进行处理。
  • 简化数据操作:它极大地简化了数据的加载、清洗、转换和分析过程。
  • 强大的生态系统集成:Pandas 与 NumPy、Matplotlib、Scikit-learn 等其他 PyData 生态系统库无缝集成,共同构建强大的数据科学工作流。

安装 Pandas

在终端或命令提示符中运行以下命令即可安装 Pandas:
bash
pip install pandas

导入约定

在 Python 代码中,通常将 Pandas 导入并约定使用 pd 作为别名:
python
import pandas as pd


2. 核心数据结构

Pandas 主要使用两种核心数据结构:Series 和 DataFrame。

Series

Series 是一种一维带标签的数组,可以容纳任何数据类型(整数、字符串、浮点数、Python 对象等)。你可以将其视为电子表格中的单列,或者带有索引的 NumPy 数组。

示例:从列表中创建 Series
“`python
import pandas as pd

s = pd.Series([10, 20, 30, 40, 50])
print(s)
输出:
0 10
1 20
2 30
3 40
4 50
dtype: int64
“`

DataFrame

DataFrame 是一种二维的、大小可变、可能异构的表格数据结构,具有带标签的轴(行和列)。它本质上是共享相同索引的 Series 对象的集合,类似于电子表格或 SQL 表。

示例:从字典创建 DataFrame
“`python
import pandas as pd

data = {‘Name’: [‘Alice’, ‘Bob’, ‘Charlie’],
‘Age’: [25, 30, 35],
‘City’: [‘New York’, ‘London’, ‘Paris’]}
df = pd.DataFrame(data)
print(df)
输出:
Name Age City
0 Alice 25 New York
1 Bob 30 London
2 Charlie 35 Paris
“`


3. 数据导入/导出 (I/O 操作)

Pandas 支持从各种文件格式读取和写入数据。

读取 CSV 文件

使用 pd.read_csv() 函数可以轻松读取 CSV 文件。
“`python

假设有一个名为 ‘data.csv’ 的文件

Name,Age,City

David,28,Berlin

Eve,22,Rome

df_csv = pd.read_csv(‘data.csv’)
print(df_csv)
“`

读取 Excel 文件

使用 pd.read_excel() 可以读取 Excel 文件,还可以指定工作表名称。
“`python

假设有一个名为 ‘sales_data.xlsx’ 的文件,其中包含 ‘Q1_Sales’ 工作表

df_excel = pd.read_excel(‘sales_data.xlsx’, sheet_name=’Q1_Sales’)

print(df_excel)

“`

读取 JSON 文件

使用 pd.read_json() 可以读取 JSON 文件。
“`python

假设有一个名为 ‘config.json’ 的文件

df_json = pd.read_json(‘config.json’)

print(df_json)

“`

写入 CSV 文件

使用 DataFrame 的 to_csv() 方法可以将 DataFrame 写入 CSV 文件。index=False 参数可以防止将 DataFrame 索引写入文件。
python
df.to_csv('processed_data.csv', index=False)


4. 数据检查与探索

理解数据的结构和内容是数据分析的关键第一步。

查看前/后几行

  • df.head(n):显示 DataFrame 的前 n 行(默认 5 行)。
  • df.tail(n):显示 DataFrame 的后 n 行(默认 5 行)。

示例:快速预览数据集
python
print(df.head(2)) # 查看前2行

输出:
Name Age City
0 Alice 25 New York
1 Bob 30 London

摘要统计信息

  • df.info():提供 DataFrame 的简洁摘要,包括数据类型、非空值数量和内存使用情况。
  • df.describe():为数值型列生成描述性统计信息(计数、均值、标准差、最小值、最大值、四分位数)。

示例:获取 DataFrame 结构和数值分布概述
python
df.info()
print("-" * 30)
df.describe()

输出:
“`

RangeIndex: 3 entries, 0 to 2
Data columns (total 3 columns):
# Column Non-Null Count Dtype


0 Name 3 non-null object
1 Age 3 non-null int64
2 City 3 non-null object
dtypes: int64(1), object(2)
memory usage: 200.0+ bytes


   Age

count 3.0
mean 30.0
std 5.0
min 25.0
25% 27.5
50% 30.0
75% 32.5
max 35.0
“`

检查缺失值

df.isnull().sum():返回每列中缺失值的数量。

示例:识别包含缺失数据的列
python
print(df.isnull().sum())

输出:
Name 0
Age 0
City 0
dtype: int64

获取列名和数据类型

  • df.columns:返回列名列表。
  • df.dtypes:返回每列的数据类型。

示例:检查列标签及其类型
python
print(df.columns)
print(df.dtypes)

输出:
Index(['Name', 'Age', 'City'], dtype='object')
Name object
Age int64
City object
dtype: object


5. 数据选择与索引

访问 DataFrame 的特定部分。

选择单列

可以使用字典风格或属性风格选择单列。
“`python
ages = df[‘Age’]
print(ages)

或者

ages_attr = df.Age

print(ages_attr)

输出:
0 25
1 30
2 35
Name: Age, dtype: int64
“`

选择多列

传入一个包含列名的列表来选择多列。
python
name_city = df[['Name', 'City']]
print(name_city)

输出:
Name City
0 Alice New York
1 Bob London
2 Charlie Paris

通过标签选择行 (.loc)

df.loc[] 基于标签(索引名称)进行行选择。
python
first_row = df.loc[0] # 选择索引为 0 的行
print(first_row)

输出:
Name Alice
Age 25
City New York
Name: 0, dtype: object

通过整数位置选择行 (.iloc)

df.iloc[] 基于整数位置(从 0 开始)进行行选择。
python
second_row = df.iloc[1] # 选择第二行(索引为 1)
print(second_row)

输出:
Name Bob
Age 30
City London
Name: 1, dtype: object

条件选择(过滤)

使用布尔条件来过滤行。
python
older_than_28 = df[df['Age'] > 28]
print(older_than_28)

输出:
Name Age City
1 Bob 30 London
2 Charlie 35 Paris


6. 数据清洗

处理常见的数据质量问题。

处理缺失值

  • df.dropna():删除包含任何缺失值的行。
  • df.fillna(value):用指定的值填充缺失值。

示例:用平均年龄填充缺失的 ‘Age’ 值
“`python

假设我们有一个带有缺失值的 DataFrame

df_with_nan = pd.DataFrame({‘Name’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘David’],
‘Age’: [25, 30, None, 28],
‘City’: [‘New York’, ‘London’, ‘Paris’, ‘Berlin’]})

df_cleaned_age = df_with_nan.fillna({‘Age’: df_with_nan[‘Age’].mean()})
print(df_cleaned_age)
输出:
Name Age City
0 Alice 25.0 New York
1 Bob 30.0 London
2 Charlie 27.6 Paris
3 David 28.0 Berlin
“`

处理重复数据

df.drop_duplicates():删除重复的行。

示例:删除任何完全重复的行
python
df_duplicates = pd.DataFrame({'Col1': [1, 2, 2, 3], 'Col2': ['A', 'B', 'B', 'C']})
df_unique = df_duplicates.drop_duplicates()
print(df_unique)

输出:
Col1 Col2
0 1 A
1 2 B
3 3 C

重命名列

df.rename(columns={'old_name': 'new_name'}):重命名 DataFrame 的列。
python
df_renamed = df.rename(columns={'City': 'Location'})
print(df_renamed)

输出:
Name Age Location
0 Alice 25 New York
1 Bob 30 London
2 Charlie 35 Paris


7. 数据操作

转换和增强数据。

创建新列

可以直接为 DataFrame 分配新列。
python
df['Senior'] = df['Age'] >= 30
print(df)

输出:
Name Age City Senior
0 Alice 25 New York False
1 Bob 30 London True
2 Charlie 35 Paris True

对列应用函数

df['Column'].apply(function):将函数应用于 Series(列)中的每个元素。
python
df['Name_Upper'] = df['Name'].apply(lambda x: x.upper())
print(df)

输出:
Name Age City Senior Name_Upper
0 Alice 25 New York False ALICE
1 Bob 30 London True BOB
2 Charlie 35 Paris True CHARLIE

排序数据

df.sort_values(by='ColumnName', ascending=True):按指定列的值对 DataFrame 进行排序。
python
df_sorted = df.sort_values(by='Age', ascending=False)
print(df_sorted)

输出:
Name Age City Senior Name_Upper
2 Charlie 35 Paris True CHARLIE
1 Bob 30 London True BOB
0 Alice 25 New York False ALICE


8. 分组与聚合

按组汇总数据。

groupby() 方法

df.groupby('ColumnName').agg_function():根据一列或多列的值对数据进行分组,然后对每个组应用聚合函数(如 mean()sum()count()min()max() 等)。

示例:计算每个城市的平均年龄
python
avg_age_by_city = df.groupby('City')['Age'].mean()
print(avg_age_by_city)

输出:
City
London 30.0
New York 25.0
Paris 35.0
Name: Age, dtype: float64

value_counts()

value_counts():计算 Series 中唯一值的出现次数。

示例:统计每个城市的出现次数
python
city_counts = df['City'].value_counts()
print(city_counts)

输出:
City
New York 1
London 1
Paris 1
Name: City, dtype: int64


9. 合并与连接 DataFrames

将来自多个源的数据组合起来。

pd.merge()

pd.merge():根据公共列或索引组合 DataFrames。on 参数指定合并的键,how 参数指定合并类型(如 ‘inner’、’left’、’right’、’outer’)。

示例:基于共享的 ‘Name’ 列合并两个 DataFrames
python
df_orders = pd.DataFrame({'Name': ['Alice', 'Bob', 'Eve'], 'OrderID': [101, 102, 103]})
df_merged = pd.merge(df, df_orders, on='Name', how='inner')
print(df_merged)

输出:
Name Age City Senior Name_Upper OrderID
0 Alice 25 New York False ALICE 101
1 Bob 30 London True BOB 102


10. 基本数据可视化

Pandas 与 Matplotlib 等可视化库良好集成。

内置绘图功能

DataFrames 和 Series 具有 .plot() 方法,它使用 Matplotlib 进行绘图。

示例:创建城市计数柱状图
“`python
import matplotlib.pyplot as plt

df[‘City’].value_counts().plot(kind=’bar’)
plt.title(‘Number of People per City’)
plt.xlabel(‘City’)
plt.ylabel(‘Count’)
plt.show()
“`


总结

本教程涵盖了 Pandas 的核心概念和常用操作,包括数据结构的介绍、数据的导入导出、数据检查、选择与索引、清洗、操作、分组聚合以及基本的合并与可视化。掌握这些基础知识,你将能够有效地使用 Pandas 进行数据分析,为更高级的数据科学任务奠定坚实的基础。

Pandas 的功能远不止于此,还有许多高级功能等待你去探索,例如时间序列分析、多级索引、透视表等。持续学习和实践是成为 Pandas 高手的关键。

滚动至顶部