私はPandas
からXarray
にN-Dimensional DataArrays
に移行してレパートリーを広げようとしています。2Dデータフレーム/配列のDictからDataArrayを作成
、私は(W /マージしたい特定の軸(以下モック例の患者)に沿って異なるpd.DataFrames
の束(ここでは行=月、COL =属性)を持っているつもりパネルやマルチインデックスを使用して:)、ありがとうございました。私はそれらをxr.DataArrays
に変換したいので、それらに次元を構築することができます。私は、私が話していることの要点を与えるために模擬データセットを作った。
私が作成したこのデータセットについては、典型的な4Dデータセットである100 patients, 12 months, 10000 attributes, 3 replicates (per attribute)
を想像してください。基本的には3 replicates per attribute
をmean
で凝縮していますので、2D pd.DataFrame
(行=月、col =属性)になります。このDataFrameは辞書の値で、その元の患者はキーです(patient_x: DataFrame_X))
私も、私はnp.ndarray
プレースホルダでそれをやった方法についてのラウンドを含めるつもりですが、、私はそのキーpatient_xだったと値の辞書からN次元DataArrayを生成することができれば、それは本当に便利ですDataFrame_Xは、どのように私はdictioからXarray
を使用してN次元DataArray
を作成することができます
ましたNary of Pandas DataFrames
?データフレームの辞書から
import xarray as xr
import numpy as np
import pandas as pd
np.random.seed(1618033)
#Set dimensions
a,b,c,d = 100,12,10000,3 #100 patients, 12 months, 10000 attributes, 3 replicates
#Create labels
patients = ["patient_%d" % i for i in range(a)]
months = [j for j in range(b)]
attributes = ["attr_%d" % k for k in range(c)]
replicates = [l for l in range(d)]
coords = [patients,months,attributes]
dims = ["Patients","Months","Attributes"]
#Dict of DataFrames
D_patient_DF = dict()
for i, patient in enumerate(patients):
A_placeholder = np.zeros((b,c))
for j, month in enumerate(months):
#Attribute x Replicates
A_attrReplicates = np.random.random((c,d))
#Collapse into 1D Vector
V_attrExp = A_attrReplicates.mean(axis=1)
#Fill array with row
A_placeholder[j,:] = V_attrExp
#Assign dataframe for every patient
DF_data = pd.DataFrame(A_placeholder, index = months, columns = attributes)
D_patient_DF[patient] = DF_data
xr.DataArray(D_patient_DF).dims
#() its empty
D_patient_DF
#{'patient_0': attr_0 attr_1 attr_2 attr_3 attr_4 attr_5 attr_6 \
# 0 0.445446 0.422018 0.343454 0.140700 0.567435 0.362194 0.563799
# 1 0.440010 0.548535 0.810903 0.482867 0.469542 0.591939 0.579344
# 2 0.645719 0.450773 0.386939 0.418496 0.508290 0.431033 0.622270
# 3 0.555855 0.633393 0.555197 0.556342 0.489865 0.204200 0.823043
# 4 0.916768 0.590534 0.597989 0.592359 0.484624 0.478347 0.507789
# 5 0.847069 0.634923 0.591008 0.249107 0.655182 0.394640 0.579700
# 6 0.700385 0.505331 0.377745 0.651936 0.334216 0.489728 0.282544
# 7 0.777810 0.423889 0.414316 0.389318 0.565144 0.394320 0.511034
# 8 0.440633 0.069643 0.675037 0.365963 0.647660 0.520047 0.539253
# 9 0.333213 0.328315 0.662203 0.594030 0.790758 0.754032 0.602375
# 10 0.470330 0.419496 0.171292 0.677439 0.683759 0.646363 0.465788
# 11 0.758556 0.674664 0.801860 0.612087 0.567770 0.801514 0.179939
@Stephanさん、ありがとうございました。あなたが書いた最初のセクションでは、リスト(D_patient_DF.items())} 'のk、vの' variables = {(k、xr.DataArray(v、dims = ['month'、 'attribute'])))と'TypeError:unhashable type: 'DataArray'というエラーが発生しました。私はPython 3.5を使っていますので、 'D_patient_DF.items()'を 'list(D_patient_DF.items())'に変更しました –
私は最後の例が好きです。データフレームをバイパスするために調整を終え、データ配列 'D_patient_DA [patient] = xr.DataArray(A_placeholder、coords = [months、attributes]、dims = [" Months "、" Attributes "))'私は 'DA_data = xr.concat(list(D_patient_DA.values())、dim =" Patients ")'を実行しますが、私は患者にラベルを割り当てることはできません(または 'coords')。 –
@ O.rka良いキャッチ、私はコードを編集するときに間違いを犯しました - 私は最初の例では辞書の理解を修正しました。 – shoyer