本文共 5008 字,大约阅读时间需要 16 分钟。
Pandas 是 Python 中最强大的数据分析库之一,它能够将数据操作与分析高效地结合起来,帮助数据科学家和开发者快速处理和可视化数据。以下是关于 Pandas 数据结构、读取数据、数据预处理、数据操作等方面的实用指南。
import pandas as pdimport numpy as np
S1 = pd.Series(['a', 'b', 'c'])S1.index() # 查看索引S1.values() # 查看数据
Df = pd.DataFrame([ ['a', 'A'], ['b', 'B'], ['c', 'C']],columns=['小写', '大写'],index=['一', '二', '三'])
columns 为列索引,index 为行索引。data = {'小写': ['a', 'b', 'c'], '大写': ['A', 'B', 'C']}Df = pd.DataFrame(data)# 读取 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() # 查看数据类型和空值
# 删除空值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/