修复 DataFrame 的坐标排序?
Fix the coordinates ordering of a DataFrame?
我正在尝试制作一个 DataFrame 来存储从测量测试中获取的多个数据集。
数据有 8 个维度 (dims) 来指定测试条件。
{'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,1,1,1,6,len(x)))
y2 = np.random.random((1,1,1,1,1,6,len(x)))
y3 = np.random.random((1,1,1,1,1,6,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, dims=('Machine','Year','Month','Compensation','Axis','SensorID','Pos'),
coords={'Machine':['MC_B'],'Year':['2020'],'Month':['Aug'],'Compensation':[1],
'Axis':['X'],'SensorID':range(6),'Pos':x},
name='val')
da3 = xr.DataArray(y3, dims=('Machine','Year','Month','Compensation','Axis','SensorID','Pos'),
coords={'Machine':['MC_C'],'Year':['2020'],'Month':['Aug'],'Compensation':[1],
'Axis':['X'],'SensorID':range(6),'Pos':x},
name='val')
ds = xr.merge([da,da2,da3])
# print(da)
df = ds.to_dataframe()
# df.reorder_levels(['Machine','Year','Month','Compensation','Axis','Errors','Pos'])
df
1 - 您真的需要使用 XArray 吗?在你给出的例子中,你可以直接实例化DataFrames,然后连接它们。
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()])
请注意,pandas < 1.0 用于默认对列进行排序,因此您必须将 sort=False
传递给 concat
。
我正在尝试制作一个 DataFrame 来存储从测量测试中获取的多个数据集。 数据有 8 个维度 (dims) 来指定测试条件。 {'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,1,1,1,6,len(x)))
y2 = np.random.random((1,1,1,1,1,6,len(x)))
y3 = np.random.random((1,1,1,1,1,6,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, dims=('Machine','Year','Month','Compensation','Axis','SensorID','Pos'),
coords={'Machine':['MC_B'],'Year':['2020'],'Month':['Aug'],'Compensation':[1],
'Axis':['X'],'SensorID':range(6),'Pos':x},
name='val')
da3 = xr.DataArray(y3, dims=('Machine','Year','Month','Compensation','Axis','SensorID','Pos'),
coords={'Machine':['MC_C'],'Year':['2020'],'Month':['Aug'],'Compensation':[1],
'Axis':['X'],'SensorID':range(6),'Pos':x},
name='val')
ds = xr.merge([da,da2,da3])
# print(da)
df = ds.to_dataframe()
# df.reorder_levels(['Machine','Year','Month','Compensation','Axis','Errors','Pos'])
df
1 - 您真的需要使用 XArray 吗?在你给出的例子中,你可以直接实例化DataFrames,然后连接它们。
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()])
请注意,pandas < 1.0 用于默认对列进行排序,因此您必须将 sort=False
传递给 concat
。