分享

使用Python批量筛选上千个Excel文件中的某一行数据并另存为新Excel文件(上篇)

 Python进阶者 2023-02-10 发布于广东

离离原上草,一岁一枯荣。

大家好,我是Python进阶者。

一、前言

前几天在帮助粉丝解决问题的时候,遇到一个简单的小需求,这里拿出来跟大家一起分享,后面再次遇到的时候,可以从这里得到灵感。

二、需求澄清

粉丝的问题来源于实际的需求,她现在想要使用Python批量筛选上千个Excel文件中的某一行数据并另存为新Excel文件,如果是正常操作的话,肯定是挨个点击进去Excel文件,然后CTRL+F找到满足筛选条件的数据,之后复制对应的那一行,然后放到新建的Excel文件中去。

这样做肯定是可以,但是当有上百个文件夹需要复制呢?上千个文件呢?肯定就需要消耗大量的时间和精力了。估计一天都不一定完成的了。

这里使用Python进行批量实现,流程下来,1分钟不到搞定!这里装X了,其实码代码还是需要点时间的,狗头保命!

下面这个代码是初始代码,可以实现的是筛选出来的每一行都另存为新文件,100个文件就存100个文件了。代码如下:

import pandas as pd
import os

path = r"./新建文件夹/"
# 获取文件夹下的所有文件名
name_list = os.listdir(path)
name_list = (pd.DataFrame(name_list))


# for循环遍历读取
for i in range(len(name_list)):
    df = pd.read_excel(path + name_list[0][i])
    print('{}读取完成!'.format(i))
    hai = df[df['id'] == '58666']
    hai.to_excel('./res/' + name_list[0][i])

三、实现过程

这里给大家提供两个可行的代码,思路也很简单,直接遍历文件夹,然后加条件筛选,之后符合条件的,直接使用concat进行合并,代码如下:

import pandas as pd
import os

path = r"./新建文件夹/"
# 获取文件夹下的所有文件名
name_list = os.listdir(path)
name_list = pd.DataFrame(name_list)

# 计数器
res = []

# for循环遍历读取
for i in range(len(name_list)):  # len(name_list)等于21
    df = pd.read_excel(path + name_list[0][i])
    print('文件{}读取完成!'.format(i))
    target_data = df[df['id'] == '58666']
    # print(target_data)
    res.append(target_data)

final_df = pd.concat(res)
final_df.to_excel("target.xlsx")

代码运行之后,就可以把某一文件夹下的所有Excel满足筛选条件的Excel行,存到一个单独的Excel中去。再也不用挨个去手动复制了,使用Python事半功倍!

后来在【猫药师Kelly】的指导下,还写了一个新的代码,也是可以的,思路和上面的差不多,代码如下所示:

import pandas as pd
import os


path = r"./新建文件夹/"
# 获取文件夹下的所有文件名
name_list = os.listdir(path)
# print(name_list)
# name_list = pd.DataFrame(name_list)
# file_path = [xxx, xxx, xxx, ......]

res = pd.read_excel(path+name_list[0])
res = res[res['id'] == '58666']

for file in name_list[1:]:
    temp = pd.read_excel(path+file)
    temp = temp[temp['id'] == '58666']
    res = pd.concat([res, temp], ignore_index=True)
res.to_excel('res.xlsx')

实现的效果如下图所示:

三、总结

大家好,我是皮皮。这篇文章主要盘点一个Python自动化办公的实用案例,这个案例可以适用于实际工作中文件处理,大家也可以稍微改进下,用于自己的实际工作中去,举一反三。

------------------- End -------------------

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多