pandas 玩转 Excel 操作总结

您所在的位置:网站首页 pandas读写excel文件 pandas 玩转 Excel 操作总结

pandas 玩转 Excel 操作总结

2023-09-14 10:50| 来源: 网络整理| 查看: 265

Python 操作Excel操作总结,包括Series和Data Frame的互转、使用pandas读取Excel表格、python读取多个数据表、python合并多个工作表以及写入Excel文件

pandas是一款基于NumPy的数据分析工具。它提供了大量的能使我们快捷处理数据的方法。

数据科学线性代数公式汇总

在这里插入图片描述

随笔记录所的所学,此博客为我记录文章所用,发布到此,仅供网友阅读参考。作者:北山啦

# -*- coding:utf-8 -*- # @Address:https://beishan.blog.csdn.net/ # @Author:北山啦

文章目录 Series和Data Frame的互转使用pandas读取Excel表格读取多个数据表合并多个工作表写入Excel文件 常用数据类型

Series:一维数组,与NumPy中的一维数组相似,和Python自身的list也相似。区别自语Series中的数据只能是一种数据,而list中的数据可以不一样Time-Series:以时间为索引的SeriesDataFrame:二维的表格型数据结构。经常用于处理Excel表格数据等,这也是我们本节课会重点讲的内容Panel:三维数组(0.25版本后,统一使用xarray,不再支持Panel) Series和Data Frame的互转 利用to_frame()实现Series转DataFrame利用squeeze()实现单列数据DataFrame转Series import pandas as pd s = pd.Series(["北山啦","关注","点赞"]) s 0 北山啦 1 关注 2 点赞 dtype: object s = s.to_frame(name="列名") s 列名0北山啦1关注2点赞 s.squeeze() 0 北山啦 1 关注 2 点赞 Name: 列名, dtype: object 使用pandas读取Excel表格

在pandas中,读取Excel非常简单,它只有一个方法:readExcel(),但是的参数非常多

主要常用的参数,我们先对其进行了解:

io:一般指定excel文件路径就可以了。也可以是其他Excel读取对象如ExcelFile、xlrd.Book等sheet_name:用于指定工作表(sheet)名称。可以是数字(工作表从0开始的索引)header:指定作为列名的行,默认为0,即第一行为列名。如果数据不含列名,则设为Nonenames:指定新的列名列表。列表中元素个数和列数必须一致index_col:指定列为索引列,默认None指的是索引为0的第一列为索引列usecols:要解析数据的列,可以是int或者str的列表,也可以是以逗号分隔的字符串(pandas 0.24新增功能),例如:”A:F”,表示从A列到F列,”A,C,F”表示A、C、F三列,还可以写成”A,C,F,K:Q”dtype:各列的数据类型,例如:{‘a’: np.float64, ‘b’: np.int32}converters:用于转换各列数据的函数的字典数据,例如:{‘a’: func_1, ‘b’: func_2} import pandas as pd sheet = pd.read_excel(io="测试数据.xlsx") sheet.head() 姓名年龄工资0OLIVER.2376531HARRY.4587992GEORGE.3498003NOAH.54128804JACK.343600

我们先来看一下取回的数据的数据类型是什么。

print(type(sheet))

可以看到,它就是我们前面提到的DataFrame数据。,直接通过它的列名称来获取即可,比如,要获得所有的工资信息,可以如下:

print(sheet['工资']) 0 7653 1 8799 2 9800 3 12880 4 3600 5 3800 6 8976 7 12000 8 8900 9 7688 10 6712 11 9655 12 6854 13 8122 14 6788 15 8830 Name: 工资, dtype: int64

可以看到它的所有的数据都列出来了,并且这一列数据的数据类型是int64,即64位整型。 得到这一列数据后,我们可以对它进行处理。

for i in sheet['工资']: print(i) 7653 8799 9800 12880 3600 3800 8976 12000 8900 7688 6712 9655 6854 8122 6788 8830

或者将它转换成列表后再处理:

salaries = list(sheet['工资']) print(salaries) [7653, 8799, 9800, 12880, 3600, 3800, 8976, 12000, 8900, 7688, 6712, 9655, 6854, 8122, 6788, 8830]

计算大家的平均工资:

sum = 0 for i in salaries: sum += i print(f"总工资:{sum}") ave = sum / len(salaries) print(f"平均工资:{ave}") 总工资:131057 平均工资:8191.0625

我们也可以对求和的方法,使用lambda表达式(匿名函数)结合reduce()函数进行。reduce()函数会对列表、元组等可遍历的元素依次进行运算:将第一个元素和第二个元素进行运算,并将结果和第三个元素进行运算,直到最后一个元素。

import functools sum = functools.reduce(lambda x, y: x + y, salaries) print(sum) 131057

我们可以使用read_excel中的usecols参数,通过它指定我们需要读取数据的列,它接收字符串或者整数列表格式的数据,列表中列出我们想要取出数据的列的名称或者索引。

import pandas as pd sheet = pd.read_excel(io="测试数据.xlsx", usecols=[2]) sheet 工资0765318799298003128804360053800689767120008890097688106712119655126854138122146788158830

或者:

import pandas as pd sheet = pd.read_excel(io="测试数据.xlsx", usecols=['工资']) sheet 工资0765318799298003128804360053800689767120008890097688106712119655126854138122146788158830

如果想在读取数据的时候,将原来的列的名字改成其他名字,则可以使用names参数指定为其他列名:

import pandas as pd sheet = pd.read_excel(io="测试数据.xlsx", names=['name','age','salary']) sheet nameagesalary0OLIVER.2376531HARRY.4587992GEORGE.3498003NOAH.54128804JACK.3436005JACOB.3238006MUHAMMAD.5189767LEO.46120008Harper.4289009Evelyn.38768810Ella.33671211Avery.26965512Scarlett.37685413Madison.41812214Lily.54678815Eleanor.288830

需要注意的是,此时,我们如果要对这个DataFrame进行操作,就需要使用新的列名了。 如果我们想在取出工资数据的时候,以“¥12,345”的格式显示,则可以在获取数据的时候,就指定转换函数:

import pandas as pd def formatsalary(num): return f"¥{format(num,',')}" sheet = pd.read_excel(io="测试数据.xlsx", usecols=['工资'],converters={'工资':formatsalary}) sheet

在这里插入图片描述

工资0¥7,6531¥8,7992¥9,8003¥12,8804¥3,6005¥3,8006¥8,9767¥12,0008¥8,9009¥7,68810¥6,71211¥9,65512¥6,85413¥8,12214¥6,78815¥8,830

上面通过converters指定了“工资”列,使用formatsalary函数来处理,所以取出来的数据就已经处理过的了。当然,我们也可以取出来后在对其进行格式化。 其他的参数,大家可以自己进行试验。下面我们再来看一下,假设我要取出所有大于等于8000的工资,该如何进行处理呢?我们可以使用按照条件来获取DataFrame的行数据:

import pandas as pd sheet = pd.read_excel(io="测试数据.xlsx", usecols=['工资']) high_salary = sheet[sheet['工资'] >= 8000] high_salary 工资18799298003128806897671200088900119655138122158830

如果想取得工资大于等于8000小于等于10000的数据:

import pandas as pd sheet = pd.read_excel(io="测试数据.xlsx") high_salary = sheet[(sheet['工资'] >= 8000) & (sheet['工资'] = 8000) & (sheet['工资']


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3