颂风侯 发表于 2024-7-22 08:07:35

excel相关的python应用

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

wp231957 发表于 2024-7-22 08:47:10

你最好是发出原表   并标注 期望操作

歌者文明清理员 发表于 2024-7-22 08:47:26

https://www.bilibili.com/video/BV1Bv4y1K74A

wp231957 发表于 2024-7-22 08:47:53

如果表格过于庞大,先精简一下再发出来

颂风侯 发表于 2024-7-22 09:27:55

谢谢各位大哥,感觉表述很头大,ai也看不懂。。。现在哪是写程序,就是描述诉求,发ai然后测试下再调整,自己写,那写不出来。。。

wp231957 发表于 2024-7-22 09:30:10

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

电脑只是辅助人类来完成一些有规律的事件   如果你的工作没啥规律性就只能手工操作

颂风侯 发表于 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 != 0]
    non_zero_weld2 = df != 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文件中。

wp231957 发表于 2024-7-22 09:38:47

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

ai也不知道你的表格长啥样
所以他的回复你是可以忽略不计

颂风侯 发表于 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 != 0][['管线号', '焊缝种类', '工艺卡编号']]
    df2 = df != 0][['管线号', '焊缝种类2', '工艺卡编号2']]

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

    # 合并两个数据框
    merged_df = pd.concat()

    # 对相同的焊缝种类和工艺卡编号进行分组求和
    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写的这个代码看起来比较对了,运行出错呢,帮忙看下什么问题呢

wp231957 发表于 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

颂风侯 发表于 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

wp231957 发表于 2024-7-22 10:43:21

颂风侯 发表于 2024-7-22 10:39
原始数据的格式如图
管线号        焊缝种类        工艺卡编号        焊缝数量                焊缝种类2        工艺卡编号2        焊缝数量2
p1        bwd        gy0 ...

可以打包rar的,这样写太乱了
你发的第一个列数和字段数都对不上

颂风侯 发表于 2024-7-22 10:53:54

大哥,rar在哪里发出呢,唉真找不到

wp231957 发表于 2024-7-22 11:04:01

颂风侯 发表于 2024-7-22 10:39
原始数据的格式如图
管线号        焊缝种类        工艺卡编号        焊缝数量                焊缝种类2        工艺卡编号2        焊缝数量2
p1        bwd        gy0 ...

你这个表格是自己设计的   还是说 其它人给你的
这个表格设计不合理,导致后期制作 有难度啊

wp231957 发表于 2024-7-22 12:13:16

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

最终 形成这个 就对了吧

>>> result
   管线号焊缝种类焊缝数量
0   p1   bwd   2.0
1p12olet   1.0
2p12   swf   1.0
3   p2   swf   3.0
4   p8olet   3.0
5   p8   swf   1.0
>>>

wp231957 发表于 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.iloc[:,]#形成一个新的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(,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")

颂风侯 发表于 2024-7-22 13:24:02

大哥真幽默,gameov{:5_109:}

颂风侯 发表于 2024-7-22 13:26:30

学习下,我现在还是回头去看pandas视频了,基础没打好。谢谢老大

lengyue869 发表于 2024-7-23 10:39:00

颂风侯 发表于 2024-7-22 13:26
学习下,我现在还是回头去看pandas视频了,基础没打好。谢谢老大

excel还是用VBA吧
页: [1]
查看完整版本: excel相关的python应用