Python数据处理:Pandas基础
2026/5/28 6:05:14 网站建设 项目流程
Python数据处理:Pandas基础

一、Pandas简介

Pandas是Python中最流行的数据分析库,提供了高效的数据结构和数据分析工具。

1.1 核心数据结构

- Series:一维标签数组
- DataFrame:二维标签数据结构

1.2 安装Pandas

pip install pandas

二、Series基础

2.1 创建Series

import pandas as pd
import numpy as np

# 从列表创建
s = pd.Series([1, 2, 3, 4, 5])
print(s)

# 指定索引
s = pd.Series([1, 2, 3], index=['a', 'b', 'c'])

# 从字典创建
s = pd.Series({'a': 1, 'b': 2, 'c': 3})

# 从标量创建
s = pd.Series(5, index=['a', 'b', 'c'])

2.2 Series操作

s = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])

# 访问元素
print(s['a']) # 1
print(s[0]) # 1
print(s[['a', 'c']]) # 多个元素

# 切片
print(s['a':'c']) # 包含结束索引
print(s[0:3]) # 不包含结束索引

# 布尔索引
print(s[s > 2])

# 运算
print(s + 10)
print(s * 2)
print(s ** 2)

三、DataFrame基础

3.1 创建DataFrame

# 从字典创建
data = {
'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 35],
'city': ['New York', 'Paris', 'London']
}
df = pd.DataFrame(data)

# 从列表的列表创建
data = [
['Alice', 25, 'New York'],
['Bob', 30, 'Paris'],
['Charlie', 35, 'London']
]
df = pd.DataFrame(data, columns=['name', 'age', 'city'])

# 从NumPy数组创建
data = np.array([[1, 2, 3], [4, 5, 6]])
df = pd.DataFrame(data, columns=['A', 'B', 'C'])

3.2 查看数据

df = pd.DataFrame({
'A': [1, 2, 3, 4, 5],
'B': [10, 20, 30, 40, 50],
'C': ['a', 'b', 'c', 'd', 'e']
})

# 查看前几行
print(df.head()) # 默认5行
print(df.head(3)) # 前3行

# 查看后几行
print(df.tail())

# 查看数据信息
print(df.info())

# 查看统计信息
print(df.describe())

# 查看形状
print(df.shape) # (5, 3)

# 查看列名
print(df.columns)

# 查看索引
print(df.index)

四、数据选择

4.1 选择列

df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 35],
'city': ['New York', 'Paris', 'London']
})

# 选择单列(返回Series)
print(df['name'])
print(df.name) # 属性访问

# 选择多列(返回DataFrame)
print(df[['name', 'age']])

4.2 选择行

# 使用loc(基于标签)
print(df.loc[0]) # 第一行
print(df.loc[0:2]) # 前三行(包含结束)
print(df.loc[0, 'name']) # 特定位置

# 使用iloc(基于位置)
print(df.iloc[0]) # 第一行
print(df.iloc[0:2]) # 前两行(不包含结束)
print(df.iloc[0, 0]) # 特定位置

# 布尔索引
print(df[df['age'] > 25])
print(df[(df['age'] > 25) & (df['city'] == 'Paris')])

4.3 条件选择

# 单条件
young = df[df['age'] < 30]

# 多条件
result = df[(df['age'] > 25) & (df['city'] == 'Paris')]

# isin方法
cities = df[df['city'].isin(['Paris', 'London'])]

# 字符串方法
starts_with_a = df[df['name'].str.startswith('A')]

五、数据修改

5.1 添加列

df['salary'] = [50000, 60000, 70000]
df['bonus'] = df['salary'] * 0.1

5.2 修改值

# 修改单个值
df.loc[0, 'age'] = 26

# 修改整列
df['age'] = df['age'] + 1

# 条件修改
df.loc[df['age'] > 30, 'status'] = 'Senior'

5.3 删除

# 删除列
df = df.drop('bonus', axis=1)
df = df.drop(columns=['bonus'])

# 删除行
df = df.drop(0, axis=0)
df = df.drop(index=[0, 1])

六、数据清洗

6.1 处理缺失值

df = pd.DataFrame({
'A': [1, 2, np.nan, 4],
'B': [5, np.nan, np.nan, 8],
'C': [9, 10, 11, 12]
})

# 检查缺失值
print(df.isnull())
print(df.isnull().sum())

# 删除缺失值
df_dropped = df.dropna() # 删除任何包含NaN的行
df_dropped = df.dropna(axis=1) # 删除任何包含NaN的列
df_dropped = df.dropna(how='all') # 删除全为NaN的行

# 填充缺失值
df_filled = df.fillna(0) # 用0填充
df_filled = df.fillna(df.mean()) # 用均值填充
df_filled = df.fillna(method='ffill') # 前向填充
df_filled = df.fillna(method='bfill') # 后向填充

6.2 处理重复值

# 检查重复
print(df.duplicated())

# 删除重复
df_unique = df.drop_duplicates()
df_unique = df.drop_duplicates(subset=['name']) # 基于特定列

6.3 数据类型转换

# 查看数据类型
print(df.dtypes)

# 转换类型
df['age'] = df['age'].astype(int)
df['date'] = pd.to_datetime(df['date'])

七、数据聚合

7.1 基本统计

df = pd.DataFrame({
'A': [1, 2, 3, 4, 5],
'B': [10, 20, 30, 40, 50]
})

print(df.sum()) # 求和
print(df.mean()) # 平均值
print(df.median()) # 中位数
print(df.std()) # 标准差
print(df.min()) # 最小值
print(df.max()) # 最大值
print(df.count()) # 计数

7.2 分组聚合

df = pd.DataFrame({
'category': ['A', 'B', 'A', 'B', 'A'],
'value': [10, 20, 30, 40, 50]
})

# 分组求和
grouped = df.groupby('category')['value'].sum()

# 多个聚合函数
grouped = df.groupby('category')['value'].agg(['sum', 'mean', 'count'])

# 多列分组
df = pd.DataFrame({
'category': ['A', 'B', 'A', 'B'],
'subcategory': ['X', 'X', 'Y', 'Y'],
'value': [10, 20, 30, 40]
})
grouped = df.groupby(['category', 'subcategory'])['value'].sum()

八、数据合并

8.1 concat:连接

df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})

# 垂直连接
result = pd.concat([df1, df2], axis=0)

# 水平连接
result = pd.concat([df1, df2], axis=1)

8.2 merge:合并

df1 = pd.DataFrame({
'key': ['A', 'B', 'C'],
'value1': [1, 2, 3]
})
df2 = pd.DataFrame({
'key': ['A', 'B', 'D'],
'value2': [4, 5, 6]
})

# 内连接
result = pd.merge(df1, df2, on='key', how='inner')

# 左连接
result = pd.merge(df1, df2, on='key', how='left')

# 右连接
result = pd.merge(df1, df2, on='key', how='right')

# 外连接
result = pd.merge(df1, df2, on='key', how='outer')

8.3 join:索引连接

df1 = pd.DataFrame({'A': [1, 2]}, index=['a', 'b'])
df2 = pd.DataFrame({'B': [3, 4]}, index=['a', 'b'])

result = df1.join(df2)

九、数据透视

9.1 pivot_table

df = pd.DataFrame({
'date': ['2024-01', '2024-01', '2024-02', '2024-02'],
'category': ['A', 'B', 'A', 'B'],
'value': [10, 20, 30, 40]
})

pivot = df.pivot_table(
values='value',
index='date',
columns='category',
aggfunc='sum'
)

9.2 crosstab:交叉表

df = pd.DataFrame({
'gender': ['M', 'F', 'M', 'F'],
'age_group': ['Young', 'Young', 'Old', 'Old'],
'count': [10, 20, 30, 40]
})

crosstab = pd.crosstab(
df['gender'],
df['age_group'],
values=df['count'],
aggfunc='sum'
)

十、时间序列

10.1 日期时间处理

# 创建日期范围
dates = pd.date_range('2024-01-01', periods=10, freq='D')

# 创建时间序列
ts = pd.Series(range(10), index=dates)

# 日期解析
df['date'] = pd.to_datetime(df['date'])

# 提取日期部分
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
df['day'] = df['date'].dt.day
df['weekday'] = df['date'].dt.weekday

# 时间偏移
df['next_week'] = df['date'] + pd.Timedelta(days=7)

10.2 重采样

# 创建时间序列
dates = pd.date_range('2024-01-01', periods=100, freq='D')
ts = pd.Series(range(100), index=dates)

# 按月重采样
monthly = ts.resample('M').sum()

# 按周重采样
weekly = ts.resample('W').mean()

十一、文件读写

11.1 CSV文件

# 读取CSV
df = pd.read_csv('data.csv')
df = pd.read_csv('data.csv', sep=';', encoding='utf-8')

# 写入CSV
df.to_csv('output.csv', index=False)

11.2 Excel文件

# 读取Excel
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')

# 写入Excel
df.to_excel('output.xlsx', sheet_name='Data', index=False)

11.3 JSON文件

# 读取JSON
df = pd.read_json('data.json')

# 写入JSON
df.to_json('output.json', orient='records')

十二、数据可视化

12.1 基本绘图

import matplotlib.pyplot as plt

df = pd.DataFrame({
'A': [1, 2, 3, 4, 5],
'B': [10, 20, 15, 25, 30]
})

# 线图
df.plot()
plt.show()

# 柱状图
df.plot(kind='bar')
plt.show()

# 散点图
df.plot(kind='scatter', x='A', y='B')
plt.show()

# 直方图
df['A'].plot(kind='hist')
plt.show()

十三、性能优化

13.1 使用向量化操作

# 慢:循环
result = []
for value in df['A']:
result.append(value * 2)

# 快:向量化
result = df['A'] * 2

13.2 使用category类型

# 对于重复值多的列
df['category'] = df['category'].astype('category')

13.3 分块读取大文件

# 分块读取
chunks = pd.read_csv('large_file.csv', chunksize=10000)
for chunk in chunks:
process(chunk)

十四、最佳实践

1. 使用向量化操作而不是循环
2. 合理使用索引提高查询速度
3. 使用category类型节省内存
4. 分块处理大文件
5. 使用inplace=True减少内存复制
6. 选择合适的数据类型
7. 及时释放不需要的DataFrame

十五、总结

Pandas是Python数据分析的核心工具,提供了强大的数据结构和丰富的数据操作方法。掌握Series和DataFrame的创建、选择、修改、聚合、合并等操作,以及数据清洗、时间序列处理等技能,可以高效地进行数据分析工作。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询