首页 > 解决方案 > 如何将 Excel 上的不同数据集组织成相同的布局/顺序(使用 pandas)

问题描述

我有多个包含相同类型数据的 Excel 电子表格,但它们的顺序不同。例如,如果文件 1 分别在第 1、2、3 和 4 列打印了来自 X 河的测量结果 A、B、C 和 D,但文件 2 打印了对不同河流 Y 河进行的相同测量结果在第 6、7、8 和 9 列中,有没有一种方法可以使用 pandas 重新组织一个数据框以匹配另一个数据框的布局(即,使 Sheet2 在第 1、2 列中打印 Y 河的测量值, 3和4)?有时数据是水平显示的,而不是如上所述的垂直显示。如果我在 400 张单独的表格上对 400 条不同的河流进行相同的测量,但是对于每个单独的文件,数据的呈现/布局是不稳定的,

标签: python-3.xexcelpandasdataframe

解决方案


有没有办法使用 pandas 重新组织一个数据框以匹配另一个数据框的布局?

您可以从其中一个数据框中获取列列表,然后对其进行排序。接下来,您可以使用排序顺序重新排序剩余的数据帧。我在下面创建了一个示例:

import pandas as pd
import numpy as np

# Create an example of your problem
root = 'River'
suffix = list('123')
cols_1 = [root + '_' + each_suffix for each_suffix in suffix]
cols_2 = [root + '_' + each_suffix for each_suffix in suffix[::]]
data = np.arange(9).reshape(3,3)
df_1 = pd.DataFrame(columns=cols_1, data=data)
df_2 = pd.DataFrame(columns=cols_2, data=data)

df_1
[out]   River_1  River_2  River_3
0        0        1        2
1        3        4        5
2        6        7        8

df_2
[out]   River_3  River_2  River_1
0        0        1        2
1        3        4        5
2        6        7        8

col_list = df_1.columns.to_list() # Get a list of column names use .sort() to sort in place or

sorted_col_list = sorted(col_list, reverse=False) # Use reverse True to invert the order

def rearrange_df_cols(df, target_order):
    df = df[target_order]
    print(df)
    return df

rearrange_df_cols(df_1, sorted_col_list)
[out]   River_1  River_2  River_3
0        0        1        2
1        3        4        5
2        6        7        8


rearrange_df_cols(df_2, sorted_col_list)
[out]   River_1  River_2  River_3
0        2        1        0
1        5        4        3
2        8        7        6

您可以根据上述内容编写一个函数,并将其应用于所有文件/工作表,前提是所有列名都存在(注意必须以相同的方式编写)。

有时数据是水平显示的,而不是如上所述的垂直显示。

作为一个单独的问题,这会更好。原则上,您应该检查数据的维度,例如df.shape,根据您可以使用的形状df.transpose(),然后使用您的函数对列名重新排序,或者直接使用您的函数对列名重新排序。


推荐阅读