Python数据分析Pandas全攻略
目录
- 一、简介
- 二、安装与导入
- 1. 安装
- 2. 导入
- 三、核心数据结构
- 1.Series- 一维带标签
- 2.DataFrame- 二维表格(核心)
- 四、数据读写
- 1. 读取数据(支持多种格式)
- 2. 保存数据
- 五、数据探索
- 1. 查看数据
- 2. 选择数据
- 六、数据清洗
- 1. 处理缺失值
- 2. 去重
- 3. 类型转换
- 七、数据分析
- 1. 过滤数据
- 2. 分组聚合
- 3. 排序
- 八、数据合并
- 1. 横向合并(类似 SQL JOIN)
- 2. 纵向合并(类似 SQL UNION)
- 九、时间序列处理
- 十、可视化(需安装 matplotlib)
- 十一、常见错误处理
- 1.KeyError
- 2. 内存不足
- 十二、完整工作流示例
- 十三、常用函数
一、简介
python 的 pandas
库是数据分析的核心工具,专门处理结构化数据(如表格、时间序列等)。
二、安装与导入
1. 安装
pip install pandas
2. 导入
import pandas as pd # 行业标准缩写
三、核心数据结构
1.Series- 一维带标签
# 创建 Series s = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd']) print(s)
a 10 b 20 c 30 d 40 dtype: int64
2.DataFrame- 二维表格(核心)
# 创建 DataFrame data = { 'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35], 'City': ['New York', 'Paris', 'London'] } df = pd.DataFrame(data) print(df)
Name Age City 0 Alice 25 New York 1 javascript Bob 30 Paris 2 Charlie 35 London
四、数据读写
1. 读取数据(支持多种格式)
# 读取 CSV df = pd.read_csv('data.csv', encoding='utf-8') # 读取 Excel df = pd.read_excel('data.xlsx', sheet_name='Sheet1') # 读取 jsON(与之前学习的 json 库结合) df = pd.read_json('data.json')
2. 保存数据
# 保存为 CSV df.to_csv('output.csv', index=False) # 不保存行索引 # 保存为 Excel df.to_excel('output.xlsx', sheet_name='Results')
五、数据探索
1. 查看数据
方法 | 作用 | 示例 |
---|---|---|
df.head(n) | 查看前n行 | df.head(3) |
df.tail(n) | 查看后n行 | df.tail(2) |
df.info() | 显示数据概览 | df.info() |
df.describe() | 统计数值列 | df.describe() |
2. 选择数据
# 选择列 ages = df['Age'] # 返回 Series name_city = df[['Name', 'City']] # 返回 DataFrame # 选择行 row_1 = df.iloc[0] # 通过位置选择 row_bob = df.loc[df['Name'] == 'Bob'] # 通过条件选择 # 切片 subset = df[1:3] # 第2-3行(左闭右开)
六、数据清洗
1. 处理缺失值
# 检测缺失值 print(df.isnull()) # 删除含缺失值的行 df_clean = df.dropna() # 填充缺失值 df_filled = df.fillna({'Age': df['Age'].mean()}) # 用平均值填充年龄列
2. 去重
df_unique = df.drop_duplicates(subset=['Name']) # python根据姓名去重
3. 类型转换
df['Age'] = df['Age'].astype(float) # 转换为浮点型
七、数据分析
1. 过滤数据
# 筛选年龄 > 25 的记录 adults = df[df['Age'] > 25] # 复合条件(注意用 & 代替 and) young_in_paris = df[(df['Age'] < 30) & (df['City'] == 'Paris')]
2. 分组聚合
# 按城市分组,计算平均年龄 city_stats = df.groupby('City')['Age'].mean() print(city_stats)
City London 35.0 New York 25.0 Paris 30.0 Name: Age, dtype: float64
3. 排序
df_sorted = df.sort_values(by='Age', ascending=False) # 按年龄降序
八、数据合并
1. 横向合并(类似 SQL JOIN)
df1 = pd.DataFrame({'ID': [1, 2], 'Name': ['A', 'B']}) df2 = pd.DataFrame({'ID': [2, 3], 'Age': [25, 30]}) # 内连接 merged = pd.merge(df1, df2, on='ID', how='inner')
2. 纵向合并(类似 SQL UNION)
combined = pd.concat([df1, df2], axis=0) # axis=0 表示行方向
九、时间序列处理
# 创建时间序列 date_rng = pd.date_range(start='2023-01-01', end='2023-01-05', freq='D') ts = pd.Series([10, 20, 15, 30, 25], index=date_rng) # 重采样(按周计算平均值) weekly_avg = ts.resample('W').mean()
十、可视化(需安装 matplotlib)
import matplotlib.pyplot as plt # 绘制年龄分布直方图 df['Age'].plot(kind='hist', bins=5) plt.title('Age Distribution') plt.show()
十一、常见错误处理
1.KeyError
# 检查列名是否存在 if 'Salary' in df.columns: print(df['Salary'])
2. 内存不足
使用
df.info(memory_usage='deep')
查看内存占用用
df.select_dtypes(include='number')
选择数值列处理
十二、完整工作流示例
# 1. 读取数据 df = pd.read_csv('sales.csv') # 2. 数据清洗 df = df.dropna(subset=['Price']) df['Date'] = pd.to_datetime(df['Date']) # 3. 分析 monthly_sales = df.groupby(pd.Grouper(key='Date', freq='M'))['Price'].sum() # 4. 可视化 monthly_sales.plot(kind='bar') plt.title('Monthly Sales') plt.show()
十三、常用函数
1、数据读取与保存
函数 | 作用 | 示例 |
---|---|---|
pd.read_csv() | 读取 CSV 文件 | df = pd.read_csv('data.csv') |
pd.read_excel() | 读取 Excel 文件 | df = pd.read_excel('data.xlsx') |
pd.read_json() | 读取 JSON 文件 | df = pd.read_json('dhttp://www.devze.comata.json') |
df.to_csv() | 保存为 CSV | df.to_csv('output.csv', index=False) |
df.to_excel() | 保存为 Excel | df.to_excel('output.xlsx') |
2、数据查看与筛选
函数/方法 | 作用 | 示例 |
---|---|---|
df.head(n) | 查看前 n 行 | df.head(5) |
df.tail(n) | 查看后 n 行 | df.tail(3) |
df.info() | 显示数据信息(列名、类型、非空值) | df.info() |
df.describe() | 统计数值列的基本统计量 | df.describe() |
df.shape | 获取 DataFrame 的维度 | print(df.shape) → 输出 (行数, 列数) |
df.columns | 获取所有列名 | df.columns.tolist() |
df.loc[] | 标签索引选择数据 | df.loc[2, 'Age'] → 选择第3行的Age列 |
df.iloc[] | 位置索引选择数据 | df.iloc[0:3, 1:4] → 选择前3行,第2-4列 |
df.query() | 用表达式筛选数据 | df.query('Age > 30 & City == "London"') |
3、数据清洗
函数/方法 | 作用 | 示例 |
---|---|---|
df.dropna() | 删除缺失值 | df.dropna(subset=['Age']) |
df.fillna() | 填充缺失值 | df.fillna({'Age': df['Age'].mean()}) |
df.drop_duplicates() | 删除重复行 | df.drop_duplicates(subset=['Name']) |
df.rename() | 重命名列 | df.rename(columns={'old':'new'}) |
df.astype() | 转换数据类型 | df['Age'] = df['Age'].astype(int) |
df.replace() | 替换特定值 | df.replace({'Male':'M', 'FemalewCBjQ39;:'F'}) |
4、数据分析
函数/方法 | 作用 | 示例 |
---|---|---|
df.groupby() | 分组聚合 | df.groupby('City')['Sales'].sum() |
df.pivot_table() | 创建数据透视表 | pd.pivot_table(df, values='Sales', index='Region', columns='Year') |
df.sort_values() | 按值排序 | df.sort_values('Age', ascending=False) |
df.value_counts() | 统计唯一值频次 | df['City'].value_counts() |
df.corr() | 计算列之间的相关系数 | df.corr() |
df.merge() | 合并两个 DataFrame | pd.merge(df1, df2, on='ID') |
pd.concat() | 拼接 DataFrame | pd.编程客栈concat([df1, df2], axis=0) |
5、数据操作
函数/方法 | 作用 | 示例 |
---|---|---|
df.apply() | 对列/行应用函数 | df['Age'].apply(lambda x: x + 1) |
df.map() | 对 Series 元素映射转换 | df['Gender'].map({'M':1, 'F':0}) |
df.assign() | 创建新列 | df.assign(Income = df['Salary']*12) |
df.drop() | 删除列或行 | df.drop(columns=['Temp']) |
df.where() | 条件筛选(保留满足条件的值) | df.where(df['Age'] > 18) |
df.melt() | 宽表转长表 | df.melt(id_vars=['Name']) |
到此这篇关于Python数据分析Pandas全攻略的文章就介绍到这了,更多相关Python Pandas安装导入内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论