Python Pandas 快速入门指南 – wiki基地


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 文件)、matplotlibseaborn(用于数据可视化,在实际数据分析中常常与 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
“`

选择行(使用 lociloc
  • 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,建议查阅官方文档、完成在线教程,并通过实际项目不断练习。数据分析的旅程才刚刚开始,祝你学习愉快!


滚动至顶部