我有多个Excel电子表格,包含相同类型的数据,但它们的顺序不同。例如,如果文件1分别在第1、第2、第3和第4栏中打印了来自X河的测量结果A、B、C和D,而文件2则分别打印在第6、第7、第8和第9栏中的Y河的测量结果相同,那么是否有办法利用熊猫重组一个数据集,以与另一个数据格式相匹配(即使Sheet2将Y河的测量结果打印在第1、2、3和4列中)?有时数据是水平的,而不是上面描述的垂直的。如果我在400个单独的表格上对400条不同的河流进行了相同的测量,但是对于每个单独的文件,数据的表示/布局是不稳定的,如果能够在每个电子表格上下一个订单,而不必在Excel上手动移动列,这将是有用的。
发布于 2020-09-08 06:01:35
是否有一种方法可以用熊猫来重新组织一个数据,以匹配另一个数据的布局?
您可以从其中一个数据中获取列的列表,然后对其进行排序。接下来,您可以使用排序顺序重新排序剩余的数据文件。我在下面创建了一个示例:
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
您可以根据上面的内容编写一个函数,并将其应用于所有的文件/工作表,前提是所有的列名称都存在(NB,必须以相同的方式编写)。
有时数据是水平显示的,而不是上面描述的垂直的。
这将更好地作为一个单独的问题。原则上,您应该检查数据的维度,例如df.shape
,根据形状,可以使用df.transpose()
,然后使用函数重新排序列名,或者直接使用函数重新排序列名。
https://stackoverflow.com/questions/63784555
复制相似问题