pandas(python)应用及上手指南
·
在面对大量数据需要进行处理时,pandas是一个很好的工具。在这简单进行一下技术分享,希望对各位后续工作提供帮助。
pandas 是 Python 生态中最核心的数据分析库之一,它提供了高效、灵活的数据结构(Series 和 DataFrame)和丰富的数据分析工具,广泛应用于数据清洗、转换、分析和可视化预处理等场景。以下是一份 pandas 上手指南,帮助快速入门:
一、安装与导入
1. 安装 pandas
使用 pip 命令安装(确保已安装 Python 环境):
pip install pandas
# 如需处理 Excel 文件,需额外安装 openpyxl 或 xlrd
pip install openpyxl # 支持 .xlsx 格式
2. 导入 pandas
惯例使用 pd 作为别名:
import pandas as pd
二、核心数据结构
pandas 的核心是两种数据结构:Series(一维)和 DataFrame(二维)。
1. Series(一维数组)
Series 是带标签(索引)的一维数组,可存储多种数据类型(数值、字符串等)。
创建 Series:
# 从列表创建(默认索引为 0,1,2...)
s1 = pd.Series([10, 20, 30, 40])
print(s1)
# 输出:
# 0 10
# 1 20
# 2 30
# 3 40
# dtype: int64
# 自定义索引
s2 = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
print(s2)
# 输出:
# a 10
# b 20
# c 30
# dtype: int64
2. DataFrame(二维表格)
DataFrame 是类似 Excel 表格的二维结构,包含行索引和列索引,每列可存储不同类型数据。
创建 DataFrame:
# 从字典创建(键为列名,值为数据)
data = {
'姓名': ['张三', '李四', '王五'],
'年龄': [25, 30, 35],
'城市': ['北京', '上海', '广州']
}
df = pd.DataFrame(data)
print(df)
# 输出:
# 姓名 年龄 城市
# 0 张三 25 北京
# 1 李四 30 上海
# 2 王五 35 广州
三、数据读取与写入
pandas 支持读取多种格式的文件(CSV、Excel、JSON 等),并能将处理后的数据写入文件。
1. 读取数据
# 读取 CSV 文件
df_csv = pd.read_csv('data.csv') # 需指定文件路径
# 读取 Excel 文件
df_excel = pd.read_excel('data.xlsx', sheet_name='Sheet1') # sheet_name 指定工作表
# 读取 JSON 文件
df_json = pd.read_json('data.json')
2. 写入数据
# 写入 CSV(index=False 不保存索引)
df.to_csv('output.csv', index=False)
# 写入 Excel
df.to_excel('output.xlsx', sheet_name='结果', index=False)
四、基本数据查看
拿到数据后,先通过以下方法了解数据概况:
# 查看前 5 行(默认),可指定行数:df.head(10)
print(df.head())
# 查看后 5 行
print(df.tail())
# 查看数据维度(行数, 列数)
print(df.shape) # 输出 (3, 3)
# 查看列名
print(df.columns) # 输出 Index(['姓名', '年龄', '城市'], dtype='object')
# 查看数据类型、非空值数量
print(df.info())
# 输出:
# <class 'pandas.core.frame.DataFrame'>
# RangeIndex: 3 entries, 0 to 2
# Data columns (total 3 columns):
# # Column Non-Null Count Dtype
# --- ------ -------------- -----
# 0 姓名 3 non-null object
# 1 年龄 3 non-null int64
# 2 城市 3 non-null object
# dtypes: int64(1), object(2)
# memory usage: 200.0+ bytes
# 查看数值型列的统计信息(均值、标准差、最值等)
print(df.describe()) # 仅对数值列有效(如年龄)
五、数据选择与筛选
1. 选择列
# 选择单列(返回 Series)
ages = df['年龄']
print(ages)
# 选择多列(返回 DataFrame)
name_city = df[['姓名', '城市']]
print(name_city)
2. 选择行
loc:基于标签(索引名)选择iloc:基于位置(0 开始的索引)选择
# loc 按标签选择行
row0 = df.loc[0] # 选择索引为 0 的行
print(row0)
# iloc 按位置选择行
row1 = df.iloc[1] # 选择第 2 行(位置 1)
print(row1)
# 选择多行(切片)
rows = df.iloc[0:2] # 选择前 2 行
3. 条件筛选
# 筛选年龄 > 28 的行
filtered = df[df['年龄'] > 28]
print(filtered)
# 输出:
# 姓名 年龄 城市
# 1 李四 30 上海
# 2 王五 35 广州
# 多条件筛选(& 且,| 或,需用括号包裹)
filtered = df[(df['年龄'] > 28) & (df['城市'] == '上海')]
六、数据清洗
实际数据常存在缺失值、重复值等问题,需先清洗。
1. 处理缺失值
# 检测缺失值(True 表示缺失)
print(df.isnull())
# 删除含缺失值的行(how='any' 有一个缺失就删除,默认)
df_clean = df.dropna()
# 填充缺失值(如用均值填充年龄)
df['年龄'] = df['年龄'].fillna(df['年龄'].mean())
2. 处理重复值
# 检测重复行
print(df.duplicated()) # True 表示重复
# 删除重复行(保留第一行)
df = df.drop_duplicates()
3. 数据类型转换
# 将“年龄”列从 int 转为 float
df['年龄'] = df['年龄'].astype(float)
# 将字符串列转为日期(如“生日”列)
df['生日'] = pd.to_datetime(df['生日'])
七、数据处理常用操作
1. 添加/删除列
# 添加新列(如“年龄+5”)
df['年龄+5'] = df['年龄'] + 5
# 删除列(axis=1 表示列,inplace=True 直接修改原数据)
df.drop('年龄+5', axis=1, inplace=True)
2. 排序
# 按“年龄”升序排序(默认 ascending=True)
df_sorted = df.sort_values(by='年龄')
# 按“年龄”降序排序
df_sorted = df.sort_values(by='年龄', ascending=False)
3. 分组统计(groupby)
按某列分组后计算统计量(如均值、总和):
# 按“城市”分组,计算每个城市的平均年龄
city_age_mean = df.groupby('城市')['年龄'].mean()
print(city_age_mean)
八、综合示例
假设我们有一份学生成绩数据(scores.csv),包含“姓名”“科目”“成绩”列,需求:统计每个学生的平均分。
import pandas as pd
# 读取数据
df = pd.read_csv('scores.csv')
# 查看数据
print(df.head())
# 按“姓名”分组,计算平均分
avg_scores = df.groupby('姓名')['成绩'].mean().reset_index() # reset_index() 转为 DataFrame
# 按平均分降序排序
avg_scores = avg_scores.sort_values(by='成绩', ascending=False)
# 保存结果
avg_scores.to_csv('学生平均分.csv', index=False)
print("结果已保存!")
总结
pandas 是数据分析的基础工具,以上介绍了最常用的入门操作。实际应用中,可结合官方文档(pandas 文档)深入学习更复杂的功能(如合并数据、透视表、时间序列分析等)。多练习处理实际数据是掌握 pandas 的关键!希望可以帮助到各位!
更多推荐
所有评论(0)