python excel 批处理

一个文件夹下有70个excel,每个文件里有180列数据,最上面有一行列名,希望用python批量把每一列进行按值大小进行排序。数值大的排最上面--降序排列,并把每一个文件里面数值最大的一行取出来,转置成列,列名就是该文件名称,最后该路径下所有经过排序的excel,取该文件中最大的一行,复制到一个新excel里,转置成列,列名是原来文件夹的名称。

img

img

根据要求提供以下代码:

import pandas as pd
import os

folder_path = r"C:\Users\新建文件夹"  # 文件夹名称
output_file = "output_file_name.xlsx"  # 输出文件名称
df2 = pd.DataFrame()
df3 = pd.DataFrame()
for filename in os.listdir(folder_path):  # 遍历文件
    if filename.endswith(".xlsx"):
        file_path = os.path.join(folder_path, filename)
        df = pd.read_excel(file_path, header=0)  # 读取文件
        for col in df.columns:
            a = df[col].sort_values(ascending=False).reset_index(drop=True)  # 按列排序
            df2[col] = a
        df3[filename] = df2.head(1).T  # 转置
    df3.to_excel(os.path.join(folder_path, output_file), index=False)

如果问题得到解决的话请点 采纳~~

实现这个功能需要使用Python中的pandas库。下面是大致的步骤:
1、导入必要的库和定义路径

import pandas as pd
import os

folder_path = "your/folder/path/"
output_file = "output_file_name.xlsx"

2、遍历文件夹中的所有Excel文件,按值大小排序并取出最大的一行

max_rows = []
for filename in os.listdir(folder_path):
    if filename.endswith(".xlsx"):
        file_path = os.path.join(folder_path, filename)
        df = pd.read_excel(file_path, header=0)
        sorted_df = df.sort_values(by=df.columns[0], ascending=False)
        max_rows.append(sorted_df.iloc[0,:])

3、将所有最大行合并成一个DataFrame,并转置

output_df = pd.concat(max_rows, axis=1).T
output_df.columns = [os.path.splitext(filename)[0] for filename in os.listdir(folder_path) if filename.endswith(".xlsx")]

4、将结果写入新的Excel文件中

output_df.to_excel(os.path.join(folder_path, output_file), index=False)

参考GPT和自己的思路,可以使用Python的pandas库来处理Excel文件并进行排序和操作。以下是实现该功能的Python代码:

import pandas as pd
import os

# 获取指定路径下所有Excel文件名
path = "your_path_here"
files = os.listdir(path)
excel_files = [f for f in files if f.endswith('.xlsx')]

# 创建一个空的DataFrame,用于存储所有文件的最大值行
max_rows_df = pd.DataFrame()

# 循环遍历每个Excel文件
for file_name in excel_files:
    # 读取Excel文件
    file_path = os.path.join(path, file_name)
    df = pd.read_excel(file_path)
    
    # 按列排序
    df_sorted = df.sort_values(by=list(df.columns), ascending=False)
    
    # 输出排序结果
    print(f"Sorted data for {file_name}:")
    print(df_sorted)
    
    # 找到最大值行
    max_row = df_sorted.iloc[0, :]
    
    # 将最大值行转置成列,并设置列名
    max_row_df = pd.DataFrame(max_row).T
    max_row_df.columns = [file_name]
    
    # 将最大值行添加到max_rows_df中
    max_rows_df = pd.concat([max_rows_df, max_row_df], axis=1)

# 将max_rows_df转置,以便每一行对应一个文件
max_rows_df = max_rows_df.T

# 将max_rows_df写入新的Excel文件,列名为原始文件夹名称
new_file_name = "result.xlsx"
new_file_path = os.path.join(path, new_file_name)
max_rows_df.to_excel(new_file_path, index=False)

该代码首先获取指定路径下所有Excel文件的文件名,然后循环遍历每个Excel文件:

读取Excel文件并按列排序。
输出排序结果,以便您可以检查结果是否正确。
找到最大值行,将其转置成列,并设置列名为原始文件名。
将最大值行添加到一个DataFrame中,以便稍后将其写入新的Excel文件中。
最后,将DataFrame转置并将其写入新的Excel文件中,其中每一行对应一个原始文件。新Excel文件的列名是原始文件夹名称。

可以按照以下步骤实现:

1、使用 os 模块遍历指定目录下的所有 Excel 文件,可以使用 os.listdir() 函数获取目录下所有文件的列表,然后使用循环遍历每个文件。

2、使用 pandas 模块读取每个 Excel 文件,可以使用 pandas.read_excel() 函数读取 Excel 文件并得到一个 DataFrame 对象。

3、对 DataFrame 对象的每一列进行排序,可以使用 DataFramesort_values() 函数进行排序。需要指定按降序排列,可以设置 ascending=False 参数。

4、取出每个文件中数值最大的一行,可以使用 DataFramenlargest() 函数获取数值最大的几行,再使用 iloc 属性选择第一行即可。

5、将该行转置成列,可以使用 DataFrameT 属性进行转置,再使用 rename 函数给该列设置列名。

6、将所有 Excel 文件中取到的最大一行添加到一个新的 DataFrame 中,可以使用 DataFrameconcat 函数进行拼接。

7、将新的 DataFrame 写入到一个新的 Excel 文件中,可以使用 DataFrameto_excel() 函数将 DataFrame 写入到 Excel 文件中。

以下是具体的代码实现:

import os
import pandas as pd

# 遍历指定目录下的所有 Excel 文件
dir_path = "excel文件夹路径"
result_df = pd.DataFrame()  # 存储所有文件中的最大一行
for file_name in os.listdir(dir_path):
    if file_name.endswith(".xlsx"):
        # 读取 Excel 文件并进行排序
        file_path = os.path.join(dir_path, file_name)
        df = pd.read_excel(file_path)
        sorted_df = df.sort_values(df.columns[0], ascending=False)

        # 取出数值最大的一行并转置成列
        max_row = sorted_df.nlargest(1, df.columns[0]).iloc[0]
        max_row = max_row.to_frame().T
        max_row.columns = [file_name]

        # 将该行添加到结果 DataFrame 中
        result_df = pd.concat([result_df, max_row], axis=1)

# 将结果 DataFrame 写入到新的 Excel 文件中
result_file_path = "结果文件路径"
result_df.to_excel(result_file_path, index=False)


其中,dir_path 变量需要设置为 Excel 文件所在的文件夹路径,result_file_path 变量需要设置为结果 Excel 文件的路径。在代码执行完毕后,结果 Excel 文件中的每一列都是一个 Excel 文件中的最大值。

首先,你需要导入一些模块,如os、pandas和xlrd,用于处理文件夹、excel和数据框。

import os
import pandas as pd
import xlrd

然后,你需要定义一个函数,用于对每个excel文件进行排序,并返回最大的一行。

def sort_and_get_max_row(file):
    # 读取excel文件为数据框
    df = pd.read_excel(file)
    # 对每一列按值大小进行降序排序
    df = df.sort_values(by=df.columns, ascending=False)
    # 取出第一行(最大的一行)
    max_row = df.iloc[0]
    # 返回最大的一行
    return max_row

接下来,你需要遍历文件夹下的所有excel文件,并调用上面定义的函数,将结果保存在一个字典中。

# 定义一个空字典,用于存储每个文件名和对应的最大行
max_rows = {}
# 定义文件夹路径(根据实际情况修改)
folder_path = "C:/Users/xxx/Desktop/excel_folder"
# 遍历文件夹下的所有文件名
for file_name in os.listdir(folder_path):
    # 拼接完整的文件路径
    file_path = os.path.join(folder_path, file_name)
    # 调用函数对每个文件进行排序,并返回最大行
    max_row = sort_and_get_max_row(file_path)
    # 将文件名和最大行添加到字典中(去掉后缀名)
    max_rows[file_name[:-5]] = max_row

最后,你需要将字典转换为数据框,并转置成列,然后保存为一个新的excel文件。

# 将字典转换为数据框(索引是原来的列名)
df_max_rows = pd.DataFrame(max_rows)
# 转置数据框(索引变为原来的文件名)
df_max_rows = df_max_rows.T
# 定义新excel文件路径(根据实际情况修改)
new_file_path = "C:/Users/xxx/Desktop/new_excel.xlsx"
# 将数据框保存为新excel文件(索引作为列名)
df_max_rows.to_excel(new_file_path, index_label="file_name")

这样就完成了你的需求。希望这段代码能对你有所帮助。

以下答案基于GPT3.5大模型与博主波罗歌编写:
实现上述需求,可以使用Python的pandas库来操作Excel文件,具体实现步骤如下:

  1. 遍历文件夹下的所有文件,使用pandas的read_excel()函数读取每一个excel文件。

  2. 对每一个文件中的每一列数据进行按值大小降序排列,使用pandas的sort_values()函数即可。

  3. 对排好序的每一个文件,取最大的一行数据,使用pandas的max()函数即可。

  4. 将取出的最大一行数据存储到一个新的DataFrame中,转置成列,列名就是原来文件夹的名称。

  5. 将这个新的DataFrame写入到一个新的excel文件中,使用pandas的to_excel()函数即可。

以下是参考实现代码:

import os
import pandas as pd

# 遍历文件夹下的所有excel文件
for filename in os.listdir('.'):
    if filename.endswith('.xls') or filename.endswith('.xlsx'):
        # 读取每一个excel文件
        df = pd.read_excel(filename)
        # 对每一列数据进行按值大小降序排列
        df = df.sort_values(by=list(df.columns), ascending=False)
        # 取出最大的一行数据
        max_row = df.max()
        # 将取出的最大一行数据存储到一个新的DataFrame中
        max_df = pd.DataFrame(max_row).T
        # 设置列名为原来文件夹的名称
        max_df.columns = [os.path.basename(os.path.dirname(os.path.abspath(__file__)))]
        # 将这个新的DataFrame写入到一个新的excel文件中
        if not os.path.exists('output.xlsx'):
            max_df.to_excel('output.xlsx', index=False)
        else:
            writer = pd.ExcelWriter('output.xlsx', engine='openpyxl') 
            writer.book = openpyxl.load_workbook('output.xlsx')
            writer.sheets = {ws.title:ws for ws in writer.book.worksheets}
            max_df.to_excel(writer, startrow=writer.sheets[os.path.basename(os.path.dirname(os.path.abspath(__file__)))].max_row, index=False, header=False)
            writer.save()

注:该代码需要放到需要操作的Excel文件所在的文件夹下运行。

参考GPT内容和自己的思路,你可以使用pandas库来读取和处理Excel文件,并使用os模块来获取文件夹中所有Excel文件的列表。以下是大致的步骤:
1.引入必要的模块和库

import pandas as pd
import os

2.定义一个函数来处理每个Excel文件,并将最大的一行数据返回

def process_excel(file_path):
    # 读取Excel文件
    df = pd.read_excel(file_path)
    
    # 对每一列进行降序排列
    df = df.sort_values(by=df.columns[0], ascending=False)
    
    # 取出数值最大的一行
    max_row = df.iloc[0]
    
    # 返回最大的一行数据
    return max_row

3.使用os模块获取文件夹中所有Excel文件的列表,并逐个处理每个文件

# 定义文件夹路径
folder_path = "/path/to/folder"

# 获取文件夹中所有Excel文件的列表
file_list = [f for f in os.listdir(folder_path) if f.endswith('.xlsx')]

# 定义一个空的DataFrame来存储每个文件中的最大行数据
result_df = pd.DataFrame()

# 逐个处理每个Excel文件
for file_name in file_list:
    # 构造文件路径
    file_path = os.path.join(folder_path, file_name)
    
    # 处理Excel文件并返回最大行数据
    max_row = process_excel(file_path)
    
    # 将最大行数据作为一列添加到结果DataFrame中,并以文件名为列名
    result_df[file_name] = max_row

# 转置结果DataFrame并以文件夹名为列名
result_df = result_df.transpose()
result_df.columns = ['col{}'.format(i+1) for i in range(len(result_df.columns))]

# 将结果保存到新Excel文件中
result_df.to_excel("result.xlsx", index_label="file_name")

这个代码将会按照你的需求来处理Excel文件,并将处理结果保存到一个新的Excel文件中。请注意替换/path/to/folder为你的文件夹路径。

你可以使用Python的pandas库来处理Excel文件。下面是一种可能的解决方案:

  1. 安装pandas库:在命令行中输入
    pip install pandas
    
  2. 导入pandas库:在Python文件中输入
    import pandas as pd
    
  3. 定义一个函数,该函数用于读取指定文件夹下的所有Excel文件,并将每个文件中的数据按值大小进行排序。该函数应该包含以下步骤:
    a. 获取文件夹路径,并使用 os 库的 listdir 函数获取该文件夹下的所有文件名。
    b. 对于每个文件名,使用 pandas 库的 read_excel 函数读取Excel文件,并将数据按值大小进行排序。
    c. 找到每个文件中最大的一行,并将其转置成列。
    d. 将每个文件的最大行保存到一个新的DataFrame中,列名是该文件的名称。
  4. 调用该函数,并将结果保存到一个新的Excel文件中。

下面是一个代码示例:

import os
import pandas as pd

# 定义读取文件夹的函数
def read_folder(folder_path):
    # 获取文件夹下所有文件名
    file_names = os.listdir(folder_path)
    # 定义一个空的DataFrame,用于保存所有文件中的最大行
    max_rows = pd.DataFrame()
    # 遍历所有文件
    for file_name in file_names:
        # 如果文件名以'.xlsx'结尾,说明是一个Excel文件
        if file_name.endswith('.xlsx'):
            # 使用pandas读取Excel文件
            df = pd.read_excel(os.path.join(folder_path, file_name))
            # 对数据按值大小进行排序
            df = df.sort_values(by=list(df.columns), ascending=False)
            # 找到最大的一行,并将其转置成列
            max_row = df.iloc[0].to_frame().T
            # 将最大行保存到max_rows中,列名是文件名
            max_rows[file_name] = max_row.iloc[0]
    # 将max_rows转置,并将列名设置为文件夹名
    max_rows = max_rows.T
    max_rows.columns = list(range(1, len(df.columns) + 1))
    max_rows.index.name = os.path.basename(folder_path)
    # 返回最大行的DataFrame
    return max_rows

# 定义文件夹路径
folder_path = '/path/to/folder'
# 读取文件夹中的Excel文件,并获取最大行的DataFrame
max_rows = read_folder(folder_path)
# 将max_rows保存到新的Excel文件中
max_rows.to_excel('output.xlsx')

请注意替换代码中的 /path/to/folder 为实际的文件夹路径。

img


运行各位老师代码,总是出现这个错误