鱼C论坛

 找回密码
 立即注册
查看: 236|回复: 18

[已解决]excel相关的python应用

[复制链接]
发表于 2024-7-22 08:07:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这个问题我觉得很复杂啊
1.我有一个源文件的excel,首先我需要识别出特定的几列有不为0的行,把他们提取归并到一个新的excel形成一个统计的excel,统计具体有多少焊缝,规格,寸口,对应的工艺卡编号这类信息(提取列的时候不是整行提取的,根据列名称提取指定的某几列)。这是第一步。
2.根据统计的excel,按照焊接材质,工艺卡编号信息,分类统计焊口总数。
3.根据统计的excel里针对列“管线号”,生成每条管线的焊接工艺卡的excel,自动生成根据管线号里含有的工艺卡编号,自动生成sheet到工艺卡,并根据统计excel中信息,填充相关信息到工艺卡。
挺复杂的,能不能指导下比如我该看哪方面的blibli视频?我装了pycharm,也会pip install,装了pandas,openpyxl这些库,对具体怎么连接一头雾水。
最佳答案
2024-7-22 12:31:45
本帖最后由 wp231957 于 2024-7-22 12:32 编辑
颂风侯 发表于 2024-7-22 10:53
大哥,rar在哪里发出呢,唉真找不到

import pandas as pd

#导入数据
dfa = pd.read_excel('11.xlsx')
#获取后面几列的 有效数据
s=dfa["焊缝种类2"].notnull()
dfc=dfa.loc[s].iloc[:,[0,4,5,6]]  #形成一个新的df  由原df的第一列 和后面的三列组成
#删除原始df的后面三列
dfa.drop(dfa.columns[-3:],axis=1,inplace=True)
#对dfc的列进行重命名 以保证和dfa 列名一致,以便下一步合并操作
dfc.columns = dfc.columns.str.replace('2', '')
#对dfa dfc 进行合并
dfd=pd.concat([dfa,dfc],axis=0)
#删除空行
dfd = dfd.dropna(axis=0)
#对新的dfd进行分组操作
result = dfd.groupby(['管线号','焊缝种类',"工艺卡编号"])['焊缝数量'].sum().reset_index()
#对分组值进行取整操作
result["焊缝数量"]= result["焊缝数量"].round().astype(int)
#输出至新表
result.to_excel('output.xlsx', index=False)
print("game over")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-7-22 08:47:10 | 显示全部楼层
你最好是发出原表   并标注 期望操作
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-22 08:47:26 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-22 08:47:53 | 显示全部楼层
如果表格过于庞大,先精简一下  再发出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-22 09:27:55 | 显示全部楼层
谢谢各位大哥,感觉表述很头大,ai也看不懂。。。现在哪是写程序,就是描述诉求,发ai然后测试下再调整,自己写,那写不出来。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-22 09:30:10 | 显示全部楼层
颂风侯 发表于 2024-7-22 09:27
谢谢各位大哥,感觉表述很头大,ai也看不懂。。。现在哪是写程序,就是描述诉求,发ai然后测试下再调整,自 ...

电脑只是辅助人类来完成一些有规律的事件   如果你的工作没啥规律性  就只能手工操作
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-22 09:36:25 | 显示全部楼层
这个是AI写的,关键我是要把一个excel里焊缝数量,焊缝数量2两个列的数值非0的,分别提取对应的工艺卡和材质这些,列数是一样的,再去对同样的工艺卡和焊缝规格合并分项总数,按管线号排序
最后再根据对应的工艺卡编号去调取工艺卡面板,根据管线号生成对应的工艺卡,并自动填充相应数据对对应的工艺卡
---------------

import pandas as pd

def process_excel(input_file, output_file):
    # 读取Excel文件
    df = pd.read_excel(input_file)

    # 提取焊缝数量不为0的行
    non_zero_weld1 = df[df['焊缝数量'] != 0]
    non_zero_weld2 = df[df['焊缝数量2'] != 0]

    # 合并两个子集,根据管线号、焊缝种类和工艺卡编号进行合并
    merged_df = pd.merge(non_zero_weld1, non_zero_weld2, on=['管线号', '焊缝种类', '工艺卡编号'], how='outer')

    # 对相同的焊缝数量进行求和
    merged_df['焊缝数量'] = merged_df['焊缝数量'].fillna(0) + merged_df['焊缝数量2'].fillna(0)

    # 删除不需要的列
    merged_df.drop(['焊缝数量2'], axis=1, inplace=True)

    # 按管线号排序
    merged_df.sort_values(by=['管线号'], inplace=True)

    # 保存到新的Excel文件
    merged_df.to_excel(output_file, index=False)

if __name__ == "__main__":
    input_file = "input.xlsx"
    output_file = "output.xlsx"
    process_excel(input_file, output_file)
这段代码首先导入了pandas库,然后定义了一个名为process_excel的函数,该函数接受输入文件名和输出文件名作为参数。函数内部首先读取输入的Excel文件,然后分别提取焊缝数量不为0和焊缝数量2不为0的行。接下来,将这两个子集按照管线号、焊缝种类和工艺卡编号进行合并,并对相同的焊缝数量进行求和。最后,删除不需要的列,并按照管线号对结果进行排序,然后将结果保存到新的Excel文件中。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-22 09:38:47 From FishC Mobile | 显示全部楼层
颂风侯 发表于 2024-7-22 09:36
这个是AI写的,关键我是要把一个excel里焊缝数量,焊缝数量2两个列的数值非0的,分别提取对应的工艺卡和材 ...

ai也不知道你的表格长啥样
所以他的回复你是可以忽略不计
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-22 10:04:10 | 显示全部楼层
import pandas as pd

def process_excel(input_file, output_file):
    # 读取Excel文件
    df = pd.read_excel(input_file)

    # 根据焊缝数量不为0的行提取指定列
    df1 = df[df['焊缝数量'] != 0][['管线号', '焊缝种类', '工艺卡编号']]
    df2 = df[df['焊缝数量2'] != 0][['管线号', '焊缝种类2', '工艺卡编号2']]

    # 重命名焊缝种类2和工艺卡编号2的列名,以便后续合并
    df2.rename(columns={'焊缝种类2': '焊缝种类', '工艺卡编号2': '工艺卡编号'}, inplace=True)

    # 合并两个数据框
    merged_df = pd.concat([df1, df2])

    # 对相同的焊缝种类和工艺卡编号进行分组求和
    result_df = merged_df.groupby(['管线号', '焊缝种类', '工艺卡编号']).sum().reset_index()

    # 对结果按照管线号进行排序
    result_df.sort_values(by='管线号', inplace=True)

    # 将结果写入新的Excel文件
    result_df.to_excel(output_file, index=False)

if __name__ == "__main__":
    input_file = "原始数据.xlsx"
    output_file = "提取结果.xlsx"
    process_excel(input_file, output_file)


AI写的这个代码看起来比较对了,运行出错呢,帮忙看下什么问题呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-22 10:08:33 | 显示全部楼层
颂风侯 发表于 2024-7-22 10:04
import pandas as pd

def process_excel(input_file, output_file):

无样本文件  无真相
哪个ai要是盲猜  能写出完整的针对你的需求的代码  那它就不是ai  而是神i
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-22 10:39:31 | 显示全部楼层
原始数据的格式如图
管线号        焊缝种类        工艺卡编号        焊缝数量                焊缝种类2        工艺卡编号2        焊缝数量2
p1        bwd        gy01        1                               
p2        swf        gy02        1                               
                                                       
                                                       
p8        olet        gy03        1                               
                                                       
                                                       
p12        olet        gy03        1                swf        gy02        1
                                                       
                                                       
                                                       
                                                       
p2        swf        gy02        1                swf        gy02        1
                                                       
                                                       
p8        olet        gy03        1                               
                                                       
                                                       
p8        olet        gy03        1                swf        gy02        1
                                                       
                                                       
                                                       
                                                       
                                                       
p1        bwd        gy01        1                       

需要统计把焊缝种类2,工艺卡编号2也汇总到焊缝种类,工艺卡编号一起统计相同管线号,焊缝种类,工艺卡编号的焊缝数量汇总

        管线号        焊缝种类        工艺卡编号        焊缝数量
p1        bwd        gy01        2
p12        olet        gy03        1
p12        swf        gy02        1
p2        swf        gy02        3
p8        olet        gy03        3
p8        swf        gy02        1

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-22 10:43:21 From FishC Mobile | 显示全部楼层
颂风侯 发表于 2024-7-22 10:39
原始数据的格式如图
管线号        焊缝种类        工艺卡编号        焊缝数量                焊缝种类2        工艺卡编号2        焊缝数量2
p1        bwd        gy0 ...

可以打包rar的,这样写太乱了
你发的第一个  列数和字段数都对不上
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-22 10:53:54 | 显示全部楼层
大哥,rar在哪里发出呢,唉真找不到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-22 11:04:01 | 显示全部楼层
颂风侯 发表于 2024-7-22 10:39
原始数据的格式如图
管线号        焊缝种类        工艺卡编号        焊缝数量                焊缝种类2        工艺卡编号2        焊缝数量2
p1        bwd        gy0 ...

你这个表格是自己设计的   还是说 其它人给你的
这个表格设计不合理,导致后期制作 有难度啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-22 12:13:16 | 显示全部楼层
wp231957 发表于 2024-7-22 11:04
你这个表格是自己设计的   还是说 其它人给你的
这个表格设计不合理,导致后期制作 有难度啊

最终 形成这个 就对了吧

>>> result
   管线号  焊缝种类  焊缝数量
0   p1   bwd   2.0
1  p12  olet   1.0
2  p12   swf   1.0
3   p2   swf   3.0
4   p8  olet   3.0
5   p8   swf   1.0
>>>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-22 12:31:45 | 显示全部楼层    本楼为最佳答案   
本帖最后由 wp231957 于 2024-7-22 12:32 编辑
颂风侯 发表于 2024-7-22 10:53
大哥,rar在哪里发出呢,唉真找不到

import pandas as pd

#导入数据
dfa = pd.read_excel('11.xlsx')
#获取后面几列的 有效数据
s=dfa["焊缝种类2"].notnull()
dfc=dfa.loc[s].iloc[:,[0,4,5,6]]  #形成一个新的df  由原df的第一列 和后面的三列组成
#删除原始df的后面三列
dfa.drop(dfa.columns[-3:],axis=1,inplace=True)
#对dfc的列进行重命名 以保证和dfa 列名一致,以便下一步合并操作
dfc.columns = dfc.columns.str.replace('2', '')
#对dfa dfc 进行合并
dfd=pd.concat([dfa,dfc],axis=0)
#删除空行
dfd = dfd.dropna(axis=0)
#对新的dfd进行分组操作
result = dfd.groupby(['管线号','焊缝种类',"工艺卡编号"])['焊缝数量'].sum().reset_index()
#对分组值进行取整操作
result["焊缝数量"]= result["焊缝数量"].round().astype(int)
#输出至新表
result.to_excel('output.xlsx', index=False)
print("game over")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-22 13:24:02 | 显示全部楼层
大哥真幽默,gameov
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-22 13:26:30 | 显示全部楼层
学习下,我现在还是回头去看pandas视频了,基础没打好。谢谢老大
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-23 10:39:00 | 显示全部楼层
颂风侯 发表于 2024-7-22 13:26
学习下,我现在还是回头去看pandas视频了,基础没打好。谢谢老大

excel还是用VBA吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 00:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表