Преобразование вывода Python - PullRequest
0 голосов
/ 05 октября 2019

Я использую Python 3.6, и у меня есть вывод пакета minisom в формате ниже

defaultdict(list,{(9,1):[array([0.1,0.3,0.5,0.9]),array([0.2,0.6,0.8,0.9])],(3,2):[array([1,3,5,9]),array([2,6,8,9])] })

, и я хотел бы иметь свой вывод (Pandas DataFrame), как показано ниже

X   Y   V1  V2  V3  V4
9   1   0.1 0.3 0.5 0.9
9   1   0.2 0.6 0.8 0.9
3   2   1   3   5   9
3   2   2   6   8   9

Я ценю вашу помощь в этом.

1 Ответ

0 голосов
/ 05 октября 2019

Я бы попробовал что-то вроде этого:

>>> x
defaultdict(<class 'list'>, {(9, 1): [array([0.1, 0.3, 0.5, 0.9]), array([0.2, 0.6, 0.8, 0.9])], (3, 2): [array([1, 3, 5, 9]), array([2, 6, 8, 9])]})
>>> df=pd.DataFrame()
>>> df[["X", "Y", "V1", "V2", "V3", "V4"]]=pd.DataFrame(pd.DataFrame.from_dict(x, orient="index").stack().reset_index().drop("level_1", axis=1).rename(columns={0: "val"}, inplace=False).apply(lambda x: [el_inner for el in x.values for el_inner in el], axis=1).to_list())
>>> df
   X  Y   V1   V2   V3   V4
0  9  1  0.1  0.3  0.5  0.9
1  9  1  0.2  0.6  0.8  0.9
2  3  2  1.0  3.0  5.0  9.0
3  3  2  2.0  6.0  8.0  9.0
>>> df.dtypes
X       int64
Y       int64
V1    float64
V2    float64
V3    float64
V4    float64
dtype: object

В качестве альтернативы:

>>> df=pd.DataFrame.from_dict(x, orient="index").stack().reset_index().drop("level_1", axis=1).rename(columns={0: "val"}, inplace=False).apply(lambda x: pd.Series({"x": x.level_0[0], "y": x.level_0[1], "v1": x.val[0], "v2": x.val[1], "v3": x.val[2], "v4": x.val[3]}), axis=1)
>>> df
     x    y   v1   v2   v3   v4
0  9.0  1.0  0.1  0.3  0.5  0.9
1  9.0  1.0  0.2  0.6  0.8  0.9
2  3.0  2.0  1.0  3.0  5.0  9.0
3  3.0  2.0  2.0  6.0  8.0  9.0
>>> df.dtypes
x     float64
y     float64
v1    float64
v2    float64
v3    float64
v4    float64
dtype: object

Если вы хотите преобразовать x и y в int:

>>> df[["x", "y"]]=df[["x", "y"]].astype(int)
>>> df
   x  y   v1   v2   v3   v4
0  9  1  0.1  0.3  0.5  0.9
1  9  1  0.2  0.6  0.8  0.9
2  3  2  1.0  3.0  5.0  9.0
3  3  2  2.0  6.0  8.0  9.0
>>> df.dtypes
x       int32
y       int32
v1    float64
v2    float64
v3    float64
v4    float64
dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...