当前位置: 首页 > news >正文

Python数据处理:Pandas基础

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的创建、选择、修改、聚合、合并等操作,以及数据清洗、时间序列处理等技能,可以高效地进行数据分析工作。

http://www.gsyq.cn/news/1410870.html

相关文章:

  • Prometheus告警怎么推送到钉钉?Alertmanager路由配置与多群分发实战
  • 家庭GPU集群投机解码实验:从理论加速到实践瓶颈的深度剖析
  • 【深入解析C++多态:从原理到实践】
  • 如何构建基于视觉识别的AI瞄准辅助系统:从原理到部署的完整指南
  • 基于LLM与向量数据库构建私有代码库智能问答系统
  • 告别Selenium配置噩梦:用Katalon Studio 8.0+快速搞定Web/App/API自动化测试
  • 2026 AI x Web3 School共学营笔记-Day9-隐私是需要理解的基础能力
  • 5步搭建智能音频中心:YoRadio开源网络收音机终极实战指南
  • STM32评估板LED与CAN总线干扰问题解析
  • 基于DistilBERT微调实现用户反馈自动分类:产品经理的AI效率革命
  • 2026年5月天津国际学校推荐:五大专业评测择校对比案例适用场景 - 品牌推荐
  • 从‘自信满满’到‘谦虚谨慎’:实战指南教你用CalibratedClassifierCV校准SVC和朴素贝叶斯的预测概率
  • 组合图像检索技术解析:从FISD基准看模型能力与多轮交互优化
  • SUMO跟车与变道模型参数调优实战:从“撞车模拟”到“流畅交通”的避坑指南
  • 别再当‘调包侠’了!用SHAP和LIME给你的机器学习模型做个‘体检报告’
  • 2026年5月北京定制游旅行社推荐:TOP5专业评测纯玩无购性价比高注意事项 - 品牌推荐
  • MCP协议安全漏洞深度解析:命令注入、SSRF与文件访问攻击的防御实践
  • 基于LangChain构建端到端智能语义搜索应用:从原理到实践
  • 开源:AI 工程从零开始:435 课、20 个阶段、~320 小时,把 AI 学透
  • 别再死记硬背SMO公式了!用Python手写一个简化版,带你搞懂支持向量机的核心优化
  • 一键神操作|最强电脑桌面整理术,还能自定义布局
  • 用RISC-V E203内核给AED除颤仪做个‘AI协处理器’:从集创赛三等奖作品看专用SOC设计
  • 从电机到屏幕:用STM32CubeMX+编码器+OLED,做个实时转速显示的小项目
  • 保姆级教程:用Python从Waymo Open Dataset里提取3D点云和标签(附完整代码)
  • 应届生与技术党必看:6款简历PPT生成工具精准匹配你的求职需求
  • 2025-2026年变频器风机品牌推荐:TOP5评测市场份额防高温案例价格 - 品牌推荐
  • 2026 主流框架怎么选,LangChain 与 AutoGen 实战对比
  • pywinauto-打开程序+连接已打开的程序
  • 告别RAM焦虑:手把手教你用Vitis SDK为MicroBlaze制作QSPI Flash启动的Bootloader
  • 2026年在线体验资产系统,定制化开发+RFID盘点核心功能