qq_34423459 2022-03-19 14:04 采纳率: 100%
浏览 66
已结题

用python实现,找出两张表格中指定列中的差异值,并按照表3的格式输出,输出时以SID列前六位码进行分类输出,自动生成六位码命名的文件夹

问题遇到的现象和发生背景:

两张表格以sid列关联后,逐列进行数据比对,发现不一致的数据按照表格3格式输出,并对表格3的sid列前6位码进行分类输出,自动生成六位码命名的文件夹

img

img

img

问题相关代码,请勿粘贴截图

import pandas as pd
df1=pd.read_excel('test.xlsx', sheet_name='内网平台').set_index('sID')
df1.sort_index()
df2=pd.read_excel('test.xlsx', sheet_name='ihaps').set_index('sID')
df_ihaps = df2.groupby(df2.index)[df2.columns[2:4201]].sum()
df_plat=df1.sort_index()
a=df_plat.columns
b=df_ihaps.columns
c=[i for i in b if not i in a]
ihaps=df_ihaps.drop(c,axis=1)
plat=df_plat
for i in ihaps.columns:
df=pd.concat([plat[i],ihaps[i]],axis=1)
df.columns=['old_'+i,'new_'+i]
df['diff']=df[df.columns[0]]-df[df.columns[1]]
df=df[~(df['diff']==0)]
if len(df)==0:continue
df.to_csv(i+'.csv')

运行结果及报错内容

1、输出的表格数据一样,但是相减之后得到一个不为0的值,能否规避这些?(如图)

img


2、代码执行后,输出许多csv文件,能否在输出的时候以sID列分类输出,以df的sID列的前六位数字自动生成文件夹,把这些csv文件分类放入相应的文件夹呢?

img

img

我的解答思路和尝试过的方法
我想要达到的结果

1、把结果输出到不同的文件夹中,文件夹名称和表内sid列前六位码一致。

img

img


2、解决数据相同,计算结果却不为0的问题,把计算结果为0的都不输出。

img


谢谢

  • 写回答

1条回答 默认 最新

  • ash062 2022-03-19 22:59
    关注

    说个思路
    1、数据相同,相减结果不为零,看结果的数据形式,可考虑添加判断,若diff绝对值小于一小值则不输出

    df=df[~(abs(df['diff'])<1e-9)]
    

    2、根据6位数字保存至相应文件夹,只需取出该6位数字,判断当前是否存在该文件夹,不存在则新建一个,相应修改保存路径

    import os
    
    dirname = i[2:8]    # i为循环的文件名
    
    if not os.path.exists(dirname):
        os.mkdir(dirname)
        ...
        df.to_csv('dirname\\' + i + '.csv')
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月28日
  • 已采纳回答 3月20日
  • 创建了问题 3月19日

悬赏问题

  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 路易威登官网 里边的参数逆向
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程
  • ¥20 模型在y分布之外的数据上预测能力不好如何解决
  • ¥15 processing提取音乐节奏
  • ¥15 gg加速器加速游戏时,提示不是x86架构
  • ¥15 python按要求编写程序
  • ¥15 Python输入字符串转化为列表排序具体见图,严格按照输入