本文最后更新于68 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
Python中Pandas用法详解:数据处理与分析利器
什么是Pandas?
Pandas是Python中一个强大的开源数据分析和处理库,它提供了高性能、易用的数据结构和数据分析工具。Pandas的名字来源于”Panel Data”(面板数据)和”Python Data Analysis”(Python数据分析)的组合。
Pandas的核心数据结构
1. Series
Series是Pandas中最基本的一维数据结构,类似于带标签的数组:
import pandas as pd
# 创建一个Series
s = pd.Series([1, 3, 5, np.nan, 6, 8])
print(s)
2. DataFrame
DataFrame是Pandas中最常用的二维表格型数据结构,可以看作是由多个Series组成的字典:
# 创建一个DataFrame
data = {
'姓名': ['张三', '李四', '王五'],
'年龄': [25, 30, 35],
'城市': ['北京', '上海', '广州']
}
df = pd.DataFrame(data)
print(df)
Pandas常用操作
1. 数据读取与写入
# 从CSV文件读取数据
df = pd.read_csv('data.csv')
# 写入到CSV文件
df.to_csv('output.csv', index=False)
# 从Excel文件读取
df = pd.read_excel('data.xlsx')
# 写入到Excel文件
df.to_excel('output.xlsx', index=False)
2. 数据查看与基本信息
# 查看前5行数据
df.head()
# 查看后5行数据
df.tail()
# 查看数据基本信息
df.info()
# 查看统计摘要
df.describe()
# 查看列名
df.columns
# 查看索引
df.index
3. 数据选择与过滤
# 选择单列
df['姓名']
# 选择多列
df[['姓名', '年龄']]
# 按位置选择行
df.iloc[0] # 第一行
df.iloc[1:3] # 第二到第三行
# 按标签选择行
df.loc[0] # 索引为0的行
# 条件筛选
df[df['年龄'] > 30]
4. 数据处理
# 添加新列
df['工资'] = [5000, 6000, 7000]
# 删除列
df.drop('城市', axis=1, inplace=True)
# 重命名列
df.rename(columns={'姓名': 'name', '年龄': 'age'}, inplace=True)
# 处理缺失值
df.fillna(0) # 用0填充缺失值
df.dropna() # 删除包含缺失值的行
# 排序数据
df.sort_values('年龄', ascending=False)
# 分组聚合
df.groupby('城市')['年龄'].mean()
5. 数据合并与连接
# 合并两个DataFrame
pd.concat([df1, df2])
# SQL风格的连接操作
pd.merge(df1, df2, on='key')
Pandas高级功能
1. 时间序列处理
# 创建时间序列索引
dates = pd.date_range('20230101', periods=6)
ts = pd.Series(np.random.randn(6), index=dates)
# 重采样时间序列数据
ts.resample('M').mean()
2. DataFrame可视化
import matplotlib.pyplot as plt
# 简单的折线图
df.plot()
plt.show()
# 柱状图
df.plot.bar()
plt.show()
3. Pandas性能优化技巧
# 使用向量化操作代替循环运算
df['新列'] = df['列1'] + df['列2']
# 使用apply函数进行复杂操作
df['新列'] = df['列'].apply(lambda x: x*2 if x >0 else x)
# 使用eval()进行表达式计算(大数据集时更高效)
pd.eval('df1 + df2')
Pandas实际应用案例
CSV数据分析示例
# 读取CSV文件并分析销售数据
sales = pd.read_csv('sales.csv')
# 计算每个产品的总销售额
product_sales = sales.groupby('产品')['销售额'].sum().sort_values(ascending=False)
# 计算每个月的销售趋势
sales['日期'] = pd.to_datetime(sales['日期'])
monthly_sales = sales.set_index('日期').resample('M')['销售额'].sum()
# 可视化结果
product_sales.plot(kind='bar')
monthly_sales.plot(title='月度销售趋势')
plt.show()
Pandas学习资源推荐
- Pandas官方文档
- 《Python for Data Analysis》 – Wes McKinney(Pandas创始人)
- DataCamp和Coursera上的Pandas课程