pandas是一款基于NumPy的数据分析工具。它提供了大量的能使我们快捷处理数据的方法。 常用数据类型
Series和Data Frame的互转
import pandas as pds = pd.Series(['北山啦','关注','点赞'])s
s = s.to_frame(name='列名')s
0 北山啦1 关注2 点赞Name: 列名, dtype: object 使用pandas读取Excel表格在pandas中,读取Excel非常简单,它只有一个方法:readExcel(),但是的参数非常多 主要常用的参数,我们先对其进行了解:
我们先来看一下取回的数据的数据类型是什么。 print(type(sheet))
可以看到,它就是我们前面提到的DataFrame数据。,直接通过它的列名称来获取即可,比如,要获得所有的工资信息,可以如下: print(sheet['工资'])
可以看到它的所有的数据都列出来了,并且这一列数据的数据类型是int64,即64位整型。 for i in sheet['工资']: print(i)
或者将它转换成列表后再处理: salaries = list(sheet['工资'])print(salaries)
计算大家的平均工资: sum = 0for i in salaries: sum += i print(f'总工资:{sum}')ave = sum / len(salaries)print(f'平均工资:{ave}')
import functoolssum = functools.reduce(lambda x, y: x + y, salaries)print(sum)
import pandas as pdsheet = pd.read_excel(io='测试数据.xlsx', usecols=[2])sheet 或者:
import pandas as pdsheet = pd.read_excel(io='测试数据.xlsx', names=['name','age','salary'])sheet
上面通过converters指定了“工资”列,使用formatsalary函数来处理,所以取出来的数据就已经处理过的了。当然,我们也可以取出来后再对其进行格式化。 其他的参数,大家可以自己进行试验。下面我们再来看一下,假设我要取出所有大于等于8000的工资,该如何进行处理呢?我们可以使用按照条件来获取DataFrame的行数据: import pandas as pdsheet = pd.read_excel(io='测试数据.xlsx', usecols=['工资'])high_salary = sheet[sheet['工资'] >= 8000]high_salary 如果想取得工资大于等于8000小于等于10000的数据:
如果只想显示符合条件的姓名和工资,则可以通过列表的方式指定要显示的列: import pandas as pdsheet = pd.read_excel(io='测试数据.xlsx')high_salary = sheet[(sheet['工资'] >= 8000) & (sheet['工资'] <=10000)][['姓名','工资']]high_salary 读取多个数据表在上面的例子中,虽然在“测试数据.xlsx”文件中包含了两个数据表(sheet),但它只读取了第一个数据表的内容,如果我想把两个数据表数据都读取出来该怎么办呢?可以指定sheet_name参数,它接收字符串、数字、字符串或数字列表以及None。如果指定为None,则返回所有数据表数据。默认为0,即返回第一个数据表数据。
{0: 姓名 年龄 工资 0 OLIVER. 23 7653 1 HARRY. 45 8799 2 GEORGE. 34 9800 3 NOAH. 54 12880 4 JACK. 34 3600 5 JACOB. 32 3800 6 MUHAMMAD. 51 8976 7 LEO. 46 12000 8 Harper. 42 8900 9 Evelyn. 38 7688 10 Ella. 33 6712 11 Avery. 26 9655 12 Scarlett. 37 6854 13 Madison. 41 8122 14 Lily. 54 6788 15 Eleanor. 28 8830, 1: 姓名 年龄 工资 0 张三 39 15000 1 李四 43 16000 2 李雷 25 6800 3 韩梅梅 28 23000} 可以看到,得到了两个数据表的数据。此时要得到数据表中的数据,就需要先通过sheet[0]、sheet[1]得到第一个数据表的所有数据,再在这个数据表数据中对数据进行处理了,例如:
![]() 如果用的是数据表的名字,则应该写成sheet['甲公司’]。 import pandas as pdsheet = pd.read_excel(io='测试数据.xlsx', sheet_name=[1, 0])st = pd.concat(sheet,ignore_index = True)st ![]() 这里ignore_index的意思是忽略各自的索引,统一使用新的索引。 合并多个工作表多个EXCECL合并到一个工作表中,Python来帮你实现
正在合并1工作表正在合并2工作表正在合并3工作表正在合并4工作表正在合并5工作表正在合并6工作表正在合并7工作表 写入Excel文件可以将DataFrame数据写入到一个新的Excel文件中,例如,我们可以将上面合并的两个Excel数据表数据,写入到新的Excel文件中:
这里我们使用DataFrame上的to_excel()方法将数据写入到Excel文件中。它的原型是:to_excel(self, excel_writer, sheet_name='Sheet1’, na_rep=’’, float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None, inf_rep='inf’, verbose=True, freeze_panes=None),常用的参数说明:
import pandas as pddf = pd.DataFrame({'姓名':['李雷', '韩梅梅', '小明', '张三', '李四', '王五'], '年龄':[31, 22, 30, 49, 38, 33]})df.to_excel('员工表.xlsx', sheet_name='202002入职') 看看是不是写入到文件了:
![]() 可以看到,确实已经写入进去了。 df1 = pd.DataFrame({'姓名':['李雷', '韩梅梅', '小明', '张三', '李四', '王五'], '年龄':[31, 22, 30, 49, 38, 33]})df2 = pd.DataFrame({'Names': ['Andrew', 'Tomas', 'Larry', 'Sophie', 'Sally', 'Simone'], 'Age':[42, 37, 39, 35, 29, 27]})dfs = {'国内员工':df1, '外籍员工':df2}writer = pd.ExcelWriter('Employees.xlsx', engine='xlsxwriter')for sheet_name in dfs.keys(): dfs[sheet_name].to_excel(writer, sheet_name=sheet_name, index=False) writer.save() 看看是不是已经写入到文件了:
{'国内员工': 姓名 年龄 0 李雷 31 1 韩梅梅 22 2 小明 30 3 张三 49 4 李四 38 5 王五 33, '外籍员工': Names Age 0 Andrew 42 1 Tomas 37 2 Larry 39 3 Sophie 35 4 Sally 29 5 Simone 27} 但是仔细看的话,会发现上面的外籍员工这个数据表,字段Names和Age反了,这是因为DataFrame自动按照字母顺序给我们排序了。要避免这种情况,需要在to_excel()中加上columns来指定表头字段顺序:
再来看看现在是否正确: sheet = pd.read_excel(io='Employees.xlsx', sheet_name=None)sheet
现在没问题了。 from openpyxl import load_workbookbook = load_workbook('Employees.xlsx') # 加载原有的数据到Workbookdf3 = pd.DataFrame({'Names': ['Judy'], 'Age':[27]})with pd.ExcelWriter('Employees.xlsx', engine='openpyxl') as writer: writer.book = book # 让writer加入原来的两个workbook df3.to_excel(writer, sheet_name='候补员工', index=False, columns=['Names', 'Age']) writer.save()
{'国内员工': 姓名 年龄 0 李雷 31 1 韩梅梅 22 2 小明 30 3 张三 49 4 李四 38 5 王五 33, '外籍员工': Names Age 0 Andrew 42 1 Tomas 37 2 Larry 39 3 Sophie 35 4 Sally 29 5 Simone 27, '候补员工': Names Age 0 Judy 27} 可以看到,在原来的Excel文件中,已经加入了“候补员工”这个数据表。加入需要在某个数据表中加入数据(append),可以使用下面方式:
这里的要点是:使用startrow指定要插入数据的文字,这里还要注意我们是往某个已经存在的数据表插入数据,所以要指定正确的sheet_name,还有就是为了避免重复的表头,将header设置成False。 import pandas as pdsheet = pd.read_excel(io='Employees.xlsx', sheet_name=None)sheet
![]()
|
|