博客
关于我
Python pandas库159个常用方法使用说明(转载)
阅读量:374 次
发布时间:2019-03-05

本文共 5008 字,大约阅读时间需要 16 分钟。

Pandas 数据分析与操作指南

Pandas 是 Python 中最强大的数据分析库之一,它能够将数据操作与分析高效地结合起来,帮助数据科学家和开发者快速处理和可视化数据。以下是关于 Pandas 数据结构、读取数据、数据预处理、数据操作等方面的实用指南。


一、Pandas 数据结构

1. 基本操作

import pandas as pdimport numpy as np
  • Series:一维数据结构,类似于 Pandas 的一维数组。可以用来存储标量值或数组。
    S1 = pd.Series(['a', 'b', 'c'])S1.index()  # 查看索引S1.values()  # 查看数据
  • DataFrame:二维数据结构,类似于 Excel 表格,适合存储多个列和行的数据。
    Df = pd.DataFrame([    ['a', 'A'],    ['b', 'B'],    ['c', 'C']],columns=['小写', '大写'],index=['一', '二', '三'])
    • columns 为列索引,index 为行索引。
    • 使用字典创建 DataFrame:
    data = {'小写': ['a', 'b', 'c'], '大写': ['A', 'B', 'C']}Df = pd.DataFrame(data)

2. 数据读取

# 读取 Excel 文件df = pd.read_excel(r'C:\Users\zhoulifu\Desktop\测试.xlsx', sheet_name='sheet1')  # 读取指定 sheetdf = pd.read_excel(r'C:\Users\zhoulifu\Desktop\测试.xlsx', index_col=0, header=0)  # 指定行列索引df = pd.read_excel(r'C:\Users\zhoulifu\Desktop\测试.xlsx', usecols=[0, 1])  # 读取指定列df = pd.read_table(r'C:\Users\zhoulifu\Desktop\测试.txt', sep=' ')  # 读取文本文件# 查看数据df.head(2)  # 查看前两行df.shape  # 查看行列数df.info()  # 查看数据类型和空值

3. 数据预处理

# 删除空值df.dropna()  # 删除全空值的行df.dropna(how='all')  # 删除全空值的行# 填充空值df.fillna(0)  # 用 0 填充空值df.fillna({'性别': '男', '年龄': '30'})  # 针对特定列填充空值# 处理重复值df.drop_duplicates()  # 删除重复值,默认保留第一个df.drop_duplicates(subset=['性别'], keep='last')  # 删除性别列重复值,保留最后一个# 查看数据类型df['ID'].dtype  # 查看列的数据类型df['ID'].astype('float')  # 将数据类型转换为浮点型# 添加索引df.columns = ['大写', '小写', '中文']  # 添加列索引df.index = [1, 2, 3]  # 添加行索引df.set_index('编号')  # 指定列为行索引# 重命名索引df.rename(index={'订单编号': '新订单编号', '客户姓名': '新客户姓名'})  # 重命名行索引df.rename(columns={1: '一', 2: '二'})  # 重命名列索引# 重置索引df.reset_index()  # 将行索引转为列df.reset_index(level=0)  # 将指定级别的索引转为列df.reset_index(drop=True)  # 删除原有索引

二、数据选择与操作

# 选择特定列df[['ID', '姓名']]# 通过行列索引选择数据df.iloc[[1, 3], [2, 4]]  # 通过行和列编号选择df.iloc[:, 0:4]  # 选择前四列# 通过标签选择df.loc['一']  # 查看指定行df.loc['一'][0]  # 查看指定行的第一列df.iloc[1]  # 查看指定行df.iloc[[1, 3]]  # 查看指定行df.iloc[1:3]  # 查看指定行范围# 数据筛选df[df['年龄'] < 45]  # 筛选年龄小于 45 的数据df[(df['年龄'] < 45) & (df['ID'] < 4)]  # 多条件筛选df.iloc[1:3, 2:4]  # 切片操作

三、数值操作

# 替换数据df['年龄'].replace(100, 33)  # 替换特定值df.replace(np.NaN, 0)  # 用 0 填充空值df.replace(['A', 'B'], 'C')  # 多对一替换df.replace({'A': 'a', 'B': 'b', 'C': 'c'})  # 多对多替换# 排序df.sort_values(by=['申请单编号'], ascending=False)  # 按申请单编号降序排序df.sort_values(by=['申请单编号'], na_position='first')  # 按申请单编号升序排序# 数据汇总df['销量'].rank(method='first')  # 给销量计算排名df.drop(['销量', 'ID'], axis=1)  # 删除指定列df.drop(df.columns[[4, 5]], axis=1)  # 删除指定列编号df.drop(['a', 'b'], axis=0)  # 删除指定行df.drop(df.index[[4, 5]], axis=0)  # 删除指定行编号# 数据统计df['ID'].value_counts()  # 查看 ID 列出现的次数df['ID'].value_counts(normalize=True, sort=False)  # 查看 ID 列出现次数的占比df['ID'].unique()  # 查看 ID 列的唯一值df['年龄'].isin(['a', 11])  # 查看是否包含特定值

四、时间序列

from datetime import datetime# 获取当前时间datetime.now()  # 获取当前年月日时分秒datetime.now().year  # 获取年份datetime.now().weekday() - 1  # 获取星期几(0 为周一)# 时间格式化datetime.now().strftime('%Y-%m-%d %H:%M:%S')  # 格式化为 '2020-03-13 09:09:12'# 时间差计算cha = datetime(2018, 5, 21, 19, 50) - datetime(2018, 5, 18, 17, 50)  # 天数cha.days  # 返回天数cha.seconds  # 返回秒数cha.seconds / 3600  # 返回小时数# 时间移动datetime.now() + timedelta(days=1)  # 往后移一天datetime.now() + timedelta(seconds=20)  # 往后移20秒datetime.now() - timedelta(days=1)  # 往前移一天

五、数据透视表

# 分组汇总df.groupby('客户分类').count()  # 按客户分类统计df.groupby('客户分类').sum()  # 按客户分类求和df.groupby(['客户分类', '区域分类']).sum()  # 多列分类求和# 组合数据df.groupby('客户分类', '区域分类')['ID'].sum()  # 多列分类后 ID 求和# 数据透视表pd.pivot_table(data, values=['ID', '销量'], index='客户分类', columns='区域', aggfunc={'ID': 'count', '销量': 'sum'}, fill_value=0, margins=True, dropna=None, margins_name='总计')

六、多表格拼接

# 表格拼接pd.merge(df1, df2)  # 默认连接pd.merge(df1, df2, on='学号')  # 指定连接列pd.merge(df1, df2, on=['学号', '姓名'])  # 多列连接pd.merge(df1, df2, left_on='学号', right_on='编号')  # 左右连接pd.merge(df1, df2, left_index='学号', right_index='编号')  # 索引连接pd.merge(df1, df2, left_on='学号', right_on='编号', how='inner')  # 内连接pd.merge(df1, df2, left_on='学号', right_on='编号', how='left')  # 左连接pd.merge(df1, df2, left_on='学号', right_on='编号', how='right')  # 右连接pd.merge(df1, df2, left_on='学号', right_on='编号', how='outer')  # 外连接# 表格拼接pd.concat([df1, df2])  # 纵向拼接,保留索引pd.concat([df1, df2], ignore_index=True)  # 纵向拼接,重置索引pd.concat([df1, df2], ignore_index=True).drop_duplicates()  # 去重后拼接

七、导出文件

# 导出 Excel 文件df.to_excel(r'C:\Users\zhoulifu\Desktop\测试.xlsx')  # 默认索引df.to_excel(r'C:\Users\zhoulifu\Desktop\测试.xlsx', sheet_name='文档', index=False)  # 去掉索引df.to_excel(r'C:\Users\zhoulifu\Desktop\测试.xlsx', sheet_name='文档', index=False, columns=['ID', '销量', '姓名'])  # 导出指定列df.to_excel(r'C:\Users\zhoulifu\Desktop\测试.xlsx', sheet_name='文档', index=False, columns=['ID', '销量', '姓名'], encoding='utf-8')  # 设置编码df.to_excel(r'C:\Users\zhoulifu\Desktop\测试.xlsx', sheet_name='文档', index=False, columns=['ID', '销量', '姓名'], encoding='utf-8', na_rep=0)  # 填充空值# 导出多个表到一个 Excel 文件writer = pd.ExcelWriter(r'C:\Users\zhoulifu\Desktop\测试.xlsx', engine='openpyxl')df1.to_excel(writer, sheet_name='表一')df2.to_excel(writer, sheet_name='表二')writer.save()

以上内容为 Pandas 的实用指南,涵盖了数据结构、读取、预处理、操作、统计等多个方面,适合数据分析和工程师日常使用。

转载地址:http://soag.baihongyu.com/

你可能感兴趣的文章
Objective-C实现counting sort计数排序算法(附完整源码)
查看>>
Objective-C实现countSetBits设置位的数量算法(附完整源码)
查看>>
Objective-C实现currency converter货币换算算法(附完整源码)
查看>>
Objective-C实现cycle sort循环排序算法(附完整源码)
查看>>
Objective-C实现data transformations数据转换算法(附完整源码)
查看>>
Objective-C实现datamatrix二维码识别 (附完整源码)
查看>>
Objective-C实现DateToDay 方法算法(附完整源码)
查看>>
Objective-C实现DBSCAN聚类算法(附完整源码)
查看>>
Objective-C实现DBSCAN聚类算法(附完整源码)
查看>>
Objective-C实现decision tree决策树算法(附完整源码)
查看>>
Objective-C实现degreeToRadian度到弧度算法(附完整源码)
查看>>
Objective-C实现depth first search深度优先搜索算法(附完整源码)
查看>>
Objective-C实现DES和3DES加解密算法(附完整源码)
查看>>
Objective-C实现des文件加密算法(附完整源码)
查看>>
Objective-C实现detectDirectedCycle检测定向循环算法(附完整源码)
查看>>
Objective-C实现detectUndirectedCycle检测无向循环算法(附完整源码)
查看>>
Objective-C实现deutsch jozsa算法(附完整源码)
查看>>
Objective-C实现DFS判断是否是二分图Bipartite算法(附完整源码)
查看>>
Objective-C实现DFS遍历或搜索图数据结构算法(附完整源码)
查看>>
Objective-C实现Diffie-Hellman算法(附完整源码)
查看>>