Pandas

十二 EXCEL文件合并和拆分

12.1 一个文件夹下多个工作簿合并
复制代码
import  pandas as pd
import os
root = 课件025/'

# data = pd.read_excel(root)
#准备一张空表

set = pd.DataFrame()

for i in os.listdir(root):

    sheet= pd.read_excel(root + i)

    set = pd.concat([set,sheet])

    print(set)

    # 写回去

    set.to_excel('')

先创建一个工作表  遍历跟目录下面的工作表  把工作表路径先拼接好,之后合并到一张工作表中
12.2 同一个工作簿中多个sheet合并
复制代码
import  pandas as pd
import os
root = '合并2.xlsx'

data = pd.read_excel(root)

set = pd.DataFrame()
#把字段名全部拿出来放在name中
name = list(data.keys())

for i in name:
    
    #data[i] 是遍历 list中有的data.keys()  赋值给新的数据
     
    data1 =data[i]

    set = pd.concat([set,data1])

print(set)

创建工作表 data.keys() 找到字段 通过list(data.keys()) 拿到返回的列表

循环拿到的列表 创建新数据data1 = data[i]  最后再合并 空表和每次的新数据连接
12.3 将一个工作表拆分多个工作表

ExcelWriter() 可以向同一个excel的不同sheet中写入对应的表格,首先需要创建一个write对象,传入的主要参数为已存在容器表格的路径以及文件名称

excelWrite对已经设置好的格式是无法更改的,因此,有pandas转入excel的时候,必须先清除格式,尤其是表头

import pandas.io.formats.excel

pandas.io.formats.excel.header_style=None

标准的保存到pandas表到excel的形式为

writer = pd.ExcelWrite('C:/123.xlsx')

data.to_excel(writer,'工作表名') #这里假设df是一个pandas的dataframe

write.save()

write.close()

复制代码
import  pandas as pd

root = '拆分.xlsx'

data = pd.read_excel(root)
#去重
slit = list(data['部门'].drop_duplicates())

root1 = pd.ExcelWriter('C:拆.xlsx')
# i 不同部门
for i in slit:
    data1 =data[data['部门']== i ]

    data1.to_excel(root1,sheet_name=i)
root1._save()

root1.close()

首先拿到一个去重的数据列表,ExcelWriter创建一个新的路径放生成的表
遍历这个列表 将拿到的不同的部门的数据data['部门']  赋值给一个新的数据
将拿到的新的数据重新写入到新创建的路径 ,表名 i 保存路径 关闭
12.4 将一个工作表拆分成多个工作簿
复制代码
import  pandas as pd
    
    root = '拆分.xlsx'
    
    data = pd.read_excel(root)

    #去重  部门做一个列表
    slit = list(data['部门'].drop_duplicates())
    
    for i in slit:

        data1 = data[data['部门'] == i]
    
        data1.to_excel('c:/' + i + '.xlsx')

十三 分组聚合

13.1 分组集合groupby

groupby分为三个步骤 拆分 - 应用-合并

DataFrame可以在其行(axis=0)或者(axis=1) 上进行分组

然后,将一个函数应用到各个分组产生新值

最后,所有这些函数的执行结果会被合并到最终的结果对象中

Groupby的size方法可以返回一个含有分组大小的Series

|------------|-------------------|
| 函数名 | |
| count | 分组中非Nan值的数量 |
| sum | 非NA值的和 |
| mean | 非NA值的算术中位数 |
| std var | 无偏 分母为n-1 标准差 和方差 |
| min max | 非NA 值的最小值和最大值 |
| prod | 非NA值的积 |
| first last | 第一个最后一个非Na的值 |

agg函数一般与groupbu函数配合使用,agg是基于列的聚合操作,而groupby是基于行的

DataFrame.agg(func,axis=0,*args,**kwargs)

func():函数,函数名称,函数列表,字典{行名/列名,函数名}

使用特定轴上的一个或者多个操作进行聚合

复制代码
import  pandas as pd

root = '6/分组聚合4.xlsx'
data = pd.read_excel(root,header=[0,1])

L1 = ['1季度','1季度','1季度','2季度','2季度']

L2 = ['1月','2月','3月','4月','5月']

set = pd.MultiIndex.from_arrays([L1,L2],names=['季度','月份'])

data2= pd.DataFrame(data,columns=set)

#axis=1列分组

data3 = data2.groupby(level='季度',axis=1).sum()

print(data3)
13.2分组对象和创建

isin()接收一个列表,判断列中元素是否存在列表中

isin()的逆函数 没有isnotin 它的反函数就是前面加上~ 例如 ~数据.班级.insin()

复制代码
import  pandas as pd

root = 分组.xlsx'

data = pd.read_excel(root)

# data2 = data.groupby(data.index%2==0 )[['语文','数学','英语']].sum()

# data2 = data.groupby(data.姓名.str[0:3])[['语文','数学','英语']].sum()

data2 = data.groupby(data.班级.isin(['1班','2班']))[['语文','数学','英语']].sum()

print(data2)

班级分组
data2 = data.pipe(pd.DataFrame.groupby,'班级').sum()

十四 数据透视表

14.1 pivot_table

pd.pivot_table(index=['',''],values=['',''],columns=[''],aggfunc=[sum,np.mean])

Aggfunc聚合函数或者函数

index 需要聚合的列名

values 在结果透视的 行上 进行分组的列名

columns 在结果透视表的 列上 进行分组的列名

fill_value =0 缺失的值填充为0

dropna=True 不显示空列

margins 添加行/列和小计和总计

复制代码
import  pandas as pd

import numpy as np

root = '透视.xlsx'
data = pd.read_excel(root)

data2 = pd.pivot_table(data,index=['部门','销售人员'],values=['数量','金额'],columns='所属区域',aggfunc=[len,sum,np.mean],fill_value=0,dropna=True)

print(data2)
14.2 crosstab
复制代码
import  pandas as pd

import numpy as np

root = 透视.xlsx'
data = pd.read_excel(root)

data2 = pd.crosstab([data.日期.dt.month,data.所属区域],data.部门,margins=True)

结果
   日期  部门 销售人员 所属区域    数量  金额  成本
0    2019-01-01  销售  李平平   湖北    16   7   8
1    2019-01-02  销售  李平平   湖北    40   8   3
2    2019-01-03  销售  李平平   湖北    20   6   7
3    2019-01-04  销售  李平平   湖北    20   7   5
4    2019-01-05  销售  李平平   湖北    16   6   6
         ...  ..  ...  ...   ...  ..  ..
1215 2022-04-30  财务   熊牧   山东   250   4   8

十五 vlookup

15.1
复制代码
import  pandas as pd

import numpy as np

root = 'Vlookup.xlsx'

data = pd.read_excel(root,sheet_name='花名册')

data1 = pd.read_excel(root,sheet_name='成绩单')

result = pd.merge(data,data1.loc[:,['学号','总分']],how='left',on='学号')

s = result.总分

result = result.drop('总分',axis=1)

result.insert(0,'总分',s)


print(result)

writer =pd.ExcelWriter(root)

result.to_excel(writer,idnex=False)

writer._save()

writer.close()

十六

16.1 map
复制代码
import  pandas as pd
#
import numpy as np

root = '数据.xlsx'

data = pd.read_excel(root)

set = {'男':'先生','女':'女士'}

data['性别']=data['性别'].map(set)

print(data)


# def c(x,w):
#     return x+w
# data['语文'] = data['语文'].apply(c,args=(3,))
#
# print(data)


# set = {'男':'先生','女':'女士'}
#
# data['性别']=data['性别'].map(set)

# def  d(x):
#     name = '先生' if x == '男' else '女士'
#     return name
# data['称呼'] = data['性别'].map(d)
# print(data)

def BMI(data):
    h= data['身高']
    w = data['体重']
    BMI= h/w **2
    
    return  BMI

data['BMI'] = data['BMI'].apply(BMI,axis=1)
16.2同比 环比
复制代码
import  pandas as pd
#
import numpy as np

root = '同比.xlsx'

data = pd.read_excel(root)

y = data['日期'].dt.year

data2 = pd.pivot_table(data,index='店号',values='金额',columns=y,aggfunc='sum')

data2['同比'] = (data2[2019]-data2[2018])/data2[2018]

print(data2)


#同比



# 环比
# def  d(x):
#    x['环比'] = x.金额 = x.金额.shift()
#    return  x
# data2 = data.sort_values(['城市','月份']).groupby('城市').apply(d)
#
# print(data2)
相关推荐
小杨4042 小时前
python入门系列十四(多进程)
人工智能·python·pycharm
用户277844910499317 小时前
借助DeepSeek智能生成测试用例:从提示词到Excel表格的全流程实践
人工智能·python
JavaEdge在掘金19 小时前
ssl.SSLCertVerificationError报错解决方案
python
我不会编程55520 小时前
Python Cookbook-5.1 对字典排序
开发语言·数据结构·python
李少兄20 小时前
Unirest:优雅的Java HTTP客户端库
java·开发语言·http
老歌老听老掉牙20 小时前
平面旋转与交线投影夹角计算
python·线性代数·平面·sympy
满怀101520 小时前
Python入门(7):模块
python
无名之逆20 小时前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
你觉得20520 小时前
哈尔滨工业大学DeepSeek公开课:探索大模型原理、技术与应用从GPT到DeepSeek|附视频与讲义下载方法
大数据·人工智能·python·gpt·学习·机器学习·aigc
似水এ᭄往昔20 小时前
【C语言】文件操作
c语言·开发语言