python-3.x - 如何将 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 条不同的河流进行相同的测量,但是对于每个单独的文件,数据的呈现/布局是不稳定的,
解决方案
有没有办法使用 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()
,然后使用您的函数对列名重新排序,或者直接使用您的函数对列名重新排序。
推荐阅读
- powerbi - 如何将日期表(日期类型列)连接到事实表日期(日期时间类型列)类型?
- python - Python:在另一个函数中定义一个函数
- r - 根据条件更改列的值(缺失数据和分类)
- java - 如何将两个全局变量添加到 groovy 文件中?
- r - 在 R 中按下一个带有 RSelenium 的按钮。Web 抓取 Google Play
- java - 当运行带有 -jar 选项的 java 命令时,是否可以使用 -cp 提供其他库?
- python - 类型错误:tick_params() 缺少 1 个必需的位置参数:'self'
- sql - 在 SQL Server 中使用插入语句优化必要的 while 循环
- prolog - 使用谓词解决序言中的 kakuro
- firebase - Firestore - 保存查询结果