Python-Pandas-Excel/CSV 数据处理大全整理 (一)
本文主要针对Python处理Excel & CSV文件的应用。所有代码均实例化代入且逐条备注解释。
全文逐条手工输入整理,可能会产生错误之处,还请指正。
之后会陆续整理 “爬虫” 与 “金融量化分析” 两个文档
# --------------------------------------------------------------------------------------------
DataFrame:二维数据,相当于Excel中一整个sheet表格,含多行多列(以下简称df)
Series:一维数据,相当于Excel中一行或一列
df.index:索引名
df.columns:列名
基础:Excel & CSV 数据的读取/建立/保存
1. 读取数据
1.1读取EXCEL数据
路径='C:/pandas/读取文件.xlsx'
数据源=pd.DataFrame(pd.read_excel(路径,header=None,names=['编号','姓名','年龄','日期'],index_col='编号'))
# 将'编号','姓名','年龄','日期'设为列名,同时将编号列作为索引列1.2 读取CSV数据
路径='C:\pandas\读取文件.txt'
数据源=pd.DataFrame(pd.read_csv(r'路径',sep='^'))
# 特别注意"/"&"\"的差异("\"为直接复制文件位置的地址,下条代码需为 r'路径')
# CSV文件需要特别注意分隔符的运用,此处使用 ‘ ^ ’ 作为分隔符2.建立数据
2.1
数据=pd.Series(['Ham','男','20','2010-10-1'],index=['姓名','性别','年龄','生日'])
2.2
字典1={'姓名':'Ham','性别':'男','年龄':20,'日期':'2010-10-1'}
字典2={'姓名':['Ham','Jack'],'年龄':[18,20]}
数据1=pd.Series(字典1)
数据2=pd.DataFrame(字典2)
2.3
列表1=['姓名','性别','年龄','日期']
列表2=['Ham','男',20,'2010-10-1']
数据=pd.Series(列表2,index=列表1)3.保存数据
数据源.to_excel(路径)
一、数据查询/筛选(单一条件/多条件筛选):
如果被查询数据中含有日期,需要将日期作为索引列:1.首先将日期列设为索引 2.将日期列设置为日期格式 3. 将日期列进行排序
路径= 'C:/pandas/透视.xlxs'
数据=pd.read_excel(r'路径',index_col='出生日期') print(数据.loc['1949-10-1','化学'])
# 查询行为1949-10-1,列为化学的值print(数据.loc['1949-10-1',['化学','英语','物理']])
# 在化学or英语or物理列,查询行为1949-10-1的值,print(数据.loc['1949-10-1':'1952-10-1',['化学','英语','物理']])
# 查询行从1949-10-1至1952-10-1,列为化学or英语or物理的值print(数据.loc['1949-10-1':'1952-10-1',['化学':'物理']])
# 查询行从1949-10-1至1952-10-1,列为化学至物理之间的值print(数据.loc[(数据['化学']>=80)&(数据['物理']>=90)])
# 查询化学>=80分且物理>=90分的值数据.loc[数据['性别']=='男','称呼']='先生'
# 新增称呼列,将性别列为男的,定义为先生数据1=数据.loc[2:4]
# 筛选1~4行的数据条件=数据['性别']=='男'
# 筛选出性别为男的数据条件='性别'=='男'and 总分>=120“
# 筛选出性别为男且总分>=120的值条件="姓名 in ['王五','赵六']"
# 筛选出姓名为王五or赵六的的值条件=数据['姓名'].str.startswith('王')
# 筛选出姓名列首字为王姓的人的值条件=数据['姓名'].str.endwith('五')
# 筛选出姓名列以五字结尾的人的值条件=数据['地址'].str.contains('上海')
# 筛选出地址列中含有上海的值条件=数据['地址'].str.contains('[a-cA-C]栋')
# 筛选出地址中含有小写a~c栋或大写A-C栋的值 ([a-cA-C]为正则表达式)print(数据[条件])print(数据.query(条件))
# 输入query后可自动识别字符串
数据=pd.read_excel(r'路径',index_col='出生日期',parse_dates=['出生日期'])
数据1=数据.sort_values('出生日期')print(数据1.turncate(before='1949').head())
# turncate 为对数据的截取print(数据1.turncate(after='1949-12').head())
# 筛选出日期 1949-12 后的数值 (前提先将日期列排序)print(数据1.turncate(before='1949-02').head())
# 筛选出日期 1949-02 前的数值 (前提先将日期列排序)print(数据1.turncate(before='1949-02-20').head())
# 筛选出日期 1949-02-20 前的数值 (前提先将日期列排序)print(数据1['1949-10-1':'1949-12-31'])
# 筛选出日期 1949-10-1 至 1949-12-31 之间的数值
二、透视表 Pivot_table:
路径='C:/pandas/透视.xlxs'
数据=pd.read_excel(r'路径')数据1=pd.pivot_table(数据,index=['部门','销售人员'],values=['数量','金额'])
# 1.pivot_table 为透视表函数 2.将非数字列部门&销售人员设为索引 3.value只显示数量&金额列(否则将会显示所有列)数据1=pd.pivot_table(数据,index=['部门','销售人员'],values=['数量','金额'],columns='所属区域',aggfunc=[sum(),sum()])
# 1.显示所有区域各区域数量&金额 2.aggfunc为设置数量&金额对应的计算方式数据1=pd.crosstab([数据.月份.dt.month,数据.所属区域],数据.部门,margins=True)
# 1.crosstab为交叉表,计数时使用 2.根据月份&所属区域,统计各部门数据 3.margins=True,添加行/列的小计和总和
三、分组或合并 Groupby:
路径='C:/pandas/分组.xlxs'
数据=pd.read_excel(r'路径')数据1=数据.groupby(['城市','区县'])[['人数','金额']].sum()
# 按城市和区县组合合并,并对人数和金额求和字典={'1月份':'sum','2月份':'count','3月份':'max','4月份':'mean'}
# 对1月份列的求和统计,对2月份列的计数统计,对3月份列的最大值统计,对4月份列的平均值统计数据1=数据.groupby('店名').agg(字典)
# groupby 是基于行的合并,agg 是基于列的合并数据1=数据.groupby(level='班级').mean()
# 对各班级这行求平均
四、数据排序 Sort_values:
数据.sort_values(by='化学',ascending=False,inplace=False)
# ascending:False为降序,True为升序
# inplace:False为在数据源上排序,True为将排序后的数据新建一个数据表,保留数据源数据.sort_values(by=['化学','数学','语文'],ascending=[False,True,False],inplace=False)
# 依次对化学、数学、语文的值进行降序、升序、降序的排列数据.sort_index(inplace=True,ascending=False)
# 对索引降序排序数据.sort_values(by=1,inplace=True,ascending=False,axis=1)
# 对索引第一行排序数据.sort_values(by=[1,2],inplace=False,ascending=[False,True],axis=1)
# 对索引第一行和第二行排序
五、Apply/Map/Apply map 的运用
路径='C:/pandas/数据源.xlxs'
数据=pd.read_excel(r'路径')
字典={'男':'先生','女':'女士'}
# 建立字典数据['称呼']=数据['性别'].map(字典)
# 将数据的性别列中,男改为先生,女改为女士。并存入新建的称呼列中数据['性别']=数据['性别'].map(字典)
# 直接在数据的性别列中,将男改为先生,女改为女士数据1=数据[['语文','数学','英语']].apply(sum,axis=0)
# 对语文、数学、英语三列的数据分别求和。axis=0表示列,axis=1表示行def BMI(数据):身高=数据['身高']体重=数据['体重']BMI=体重/身高**2return BMI
数据['BMI']=数据.apply(BMI,axis=1)
# BMI列应用公式:(体重/身高)的平方数据1=数据.applymap(lambda x:"%.3f" % x)
# 将数据保留三位小数
六、Merge/Insert 的运用 (等同于Excel中VLOOKUP查询匹配功能)
路径='C:/pandas/数据源.xlxs'
数据1=pd.read_excel(r'路径',sheet_name='学生名单')
数据2=pd.read_excel(r'路径',sheet_name='成绩单')结果=pd.merge(数据1,数据2.loc[:,['学号','总分']],how='left',on='学号')
# 1.以数据1为基准,将数据2匹配过来 2.[:,['学号','总分']]表示数据1行全选,数据2只选学号和总分 3.on='学号'表示以学号为匹配值最终分=结果.总分
# 将结果中的总分列赋值给最终分结果=结果.drop('总分',axis=1)
# 删除结果中的总分列结果.insert(0,'成绩',最终分)
# 在第0列插入最终分,并名命为成绩
Python-Pandas-Excel/CSV 数据处理大全整理 (一)相关推荐
- python pandas读取csv文件指定行_python pandas获取csv指定行 列的操作方法
python pandas获取csv指定行 列的操作方法 pandas获取csv指定行,列 house_info = pd.read_csv('house_info.csv') 1:取行的操作: ho ...
- Python读取excel/csv表格并通过折线图可视化显示
Python读取excel/csv表格并通过折线图可视化显示 写作背景 参数 使用figure()函数重新申请一个figure对象 注意,每次调用figure的时候都会重新申请一个figure对象 第 ...
- python pandas 读写 csv 文件
python pandas 读写 csv 文件 具体看官方文档 https://www.pypandas.cn/docs/user_guide/io.html#csv-文本文件 import pand ...
- pandas Excel 光谱数据处理
pandas Excel 光谱数据处理 在化学专业的学习中常常会使用到光谱分析,但是这种资料难以寻找,通常要进行手动绘制.通过查找数据库的源码,可以获取此数据,本文是使用pandas对此数据进行处理, ...
- python pandas excel数据处理_Python处理Excel数据-pandas篇
Python处理Excel数据-pandas篇 非常适用于大量数据的拼接.清洗.筛选及分析 在计算机编程中,pandas是Python编程语言的用于数据操纵和分析的软件库.特别是,它提供操纵数值表格和 ...
- python pandas excel 排序_Python pandas对excel的操作实现示例
最近经常看到各平台里都有Python的广告,都是对excel的操作,这里明哥收集整理了一下pandas对excel的操作方法和使用过程.本篇介绍 pandas 的 DataFrame 对列 (Colu ...
- Python拆分excel及数据处理相关tips
拆分excel及数据处理 将excel根据某一列的内容进行拆分,并输出所有拆分后的excel文件. <示例中以'标的名称'这一列的内容作拆分> 对分组所依照的列进行处理 .unique() ...
- 【python pandas excel操作】
目录 1.打开Excel,获取不同sheet的名称 2.获取不同sheet的内容 3. 获取行数以及表头 4.对某一列的信息进行筛选 5.根据列号和索引号提取一行或者一列的数据 6.其他panda对E ...
- 用python对excel进行数据处理与分析操作
本文代码及数据集来自<超简单:用Python让Excel飞起来(实战150例)> # 排序一个工作表中的数据(方法一) import pandas as pd data = pd.read ...
最新文章
- 如何从ActiveMQ平滑迁移到Kafka?
- 十三、熵编码算法(3):CAVLC原理
- Ajax与WebGIS
- linux下安装微信wechat
- Hibernate面试题分析
- python 邮件中生成图表_60秒一口Python:147个demo,助你从新手小白步步进阶编程高手...
- u-boot2010.06移植阶段三--norflash驱动
- Redis 3.2.4配置文件翻译
- 摄影名词解释 (ISO、快门、光圈、曝光、测光与测光模式、曝光补偿、焦距、光学变焦与数码变焦、景深与光圈优先、白平衡与RAW)
- 【仿人机器人】机器人的数学建模基础
- 锐捷云教室 服务器型号,锐捷智慧云课堂方案(云教室+简单)优秀课件
- 【无标题】开发一个app到底要多少钱?有多贵?
- 国产首发:上海川土微电子数字接口电源数字隔离芯片模拟芯片领导者
- Unity优化篇——mesh合并
- 【解决】source ~/.vimrc出错bash: /etc/vim/vimrc: line 21: syntax error near unexpected token `syntax'
- elasticsearch学习(六):IK分词器
- 01-MySQL 创建数据库
- 推卸责任的 Chain of Responsibility模式
- stc15w系列单片机——TCRT5000(寻迹传感器)与光敏传感器(附代码)
- 微信小程序开发video播放问题
热门文章
- 程序员周六给心爱的“她”放电的动人故事
- 企微小裂变与企鲸客scrm的功能差异化
- 电脑重装系统问题之进入BIOS界面
- 6-wireshark网络安全分析——网络取证一
- yocto 菜谱bb的选择
- 苹果a13_苹果或推出1500元以内低价iPhone,A13加持
- 在电脑壁纸上HTML时钟壁纸,在电脑的桌面上怎么添加可爱的小钟表?
- 免费内网穿透工具--路由侠
- 获取头信息header中参数access_token失败,获取header头信息中带下划线参数失败
- HTML:一种标记语言而不是编程语言(2.0)