问题描述
我正在尝试制作一个DataFrame来存储从测量测试中获取的几个数据集。 数据具有8个维度(尺寸)以指定测试条件。 {'Machine','Year','Month','Compensation','Axis','SensorID','Pos(ition)'}。
当我从测试中制作一个DataFrame时,我发现尺寸是按字母顺序排列的,即: {'Axis','Compensation','Machine','Month','Pos','SensorID','Year'}。
因此,输出如下图所示。
为了便于理解数据,我想保留尺寸的初始顺序 {'Machine','Year','Month','Compensation','Axis','SensorID','Pos'}。
是否可以保留尺寸的初始顺序? 还是有更好的方法来处理这类高维数据?
Python代码如下所示。 例如,我从不同的机器上获得了3个数据,分别是“ MC_A”,“ MC_B”和“ MC_C”。 数据分别存储在DataArray'da','da2'和'da3'中。 为了创建一个存储它们的DataFrame,我使用了'merge'方法。
import xarray as xr
import numpy as np
import pandas as pd
import plotly.graph_objects as go
import plotly.express as px
x = np.linspace(0,1500,16)
y = np.random.random((1,1,6,len(x)))
y2 = np.random.random((1,len(x)))
y3 = np.random.random((1,len(x)))
da = xr.DataArray(y,dims=('Machine','Year','Month','Compensation','Axis','SensorID','Pos'),coords={'Machine':['MC_A'],'Year':['2020'],'Month':['Aug'],'Compensation':[1],'Axis':['X'],'SensorID':range(6),'Pos':x},name='val')
da2 = xr.DataArray(y2,coords={'Machine':['MC_B'],name='val')
da3 = xr.DataArray(y3,coords={'Machine':['MC_C'],name='val')
ds = xr.merge([da,da2,da3])
# print(da)
df = ds.to_dataframe()
# df.reorder_levels(['Machine','Errors','Pos'])
df
解决方法
1-您是否真的需要使用XArray?在您给出的示例中,您可以直接实例化DataFrame,然后将它们串联起来。
da = pd.DataFrame({'Machine':['MC_A'],'Year':['2020'],'Month': 'Aug'],'Compensation':[1],'Axis':['X'],'SensorID':range(6),'Pos':x})
...
ds = pd.concat([da,da1,da2])
2-如果这样做,则可以合并数据框而不是
df = pd.concat([da.to_dataframe(),da2.to_dataframe(),da3.to_dataframe()])
请注意,默认情况下,熊猫sort=False传递给concat
。