преобразовать диктант, содержащий кортеж списков, в фрейм данных?

#python #pandas #dataframe

Вопрос:

У меня есть диктант кластеров в виде:

 {1: array([[31.47671257, 30.0206217 ],  [31.49589 , 30.02547 ],  [31.474725 , 30.025477 ],  [31.448643 , 30.018775 ],  [31.486 , 30.014 ],  [31.438 , 30.002 ],  [31.461539 , 30.042498 ,....) 2: array([[31.29888 , 29.989722 ],  [31.31500756, 29.97498111],  [31.30848442, 30.00917636],  [31.35363137, 29.97423761],  [31.318159 , 29.984137 ],  [31.317 , 29.979063 ],  [31.312838 , 29.963003 ],  ) etc.  

Я хочу, чтобы выходные данные были представлены в виде фрейма данных, подобного этому:

 Lng Lat no_of_Cluster  0 31.49589 30.02547 1 1 31.474725 30.025477 4 2 31.486 30.014 7    

Я использовал эту функцию

 df = pd.DataFrame.from_dict(Output, orient='index',columns=['A'])  

Но это мой результат

 A 1 [[31.47671257, 30.0206217], [31.49589, 30.0254... 2 [[31.29888, 29.989722], [31.31500756, 29.97498... 3 [[31.27858, 29.966307], [31.281, 29.975], [31.... 4 [[31.62090813, 30.0946129], [31.74450432, 30.1... 5 [[31.577472, 30.159004], [31.62640129, 30.1430... 6 [[31.2357, 30.0444], [31.23887574, 30.0444], [... 7 [[31.339338, 30.103572], [31.33045708, 30.0610... 8 [[31.30796944, 29.86398859], [31.318988, 29.89... 9 [[31.413884509277, 30.114512733553], [31.34002... 10 [[31.395257, 29.978487], [31.386, 30.05], [31....  

Как мне его преобразовать?

Комментарии:

1. Откуда берутся столбцы «количество кластеров»? Является ли это своего рода обобщением?

2. Это происходит из алгоритма K — средних. В принципе, я пытался создать свою собственную реализацию алгоритма с помощью NumPy, и это сработало, но теперь у меня возникли проблемы с преобразованием данных из одной формы в другую.

Ответ №1:

Попробуйте выполнить следующие действия:

 import pandas as pd  clusters = [] for k,v in data.items():  df = pd.DataFrame(v, columns=['Lng', 'Lat'])  df['no_of_Cluster'] = k  clusters.append(df) total_df = pd.concat(clusters) print(total_df)  

Это приведет к

 Lng Lat no_of_Cluster 0 31.476713 30.020622 1 1 31.495890 30.025470 1 2 31.474725 30.025477 1 3 31.448643 30.018775 1 4 31.486000 30.014000 1 5 31.438000 30.002000 1 6 31.461539 30.042498 1 0 31.298880 29.989722 2 1 31.315008 29.974981 2 2 31.308484 30.009176 2 3 31.353631 29.974238 2 4 31.318159 29.984137 2 5 31.317000 29.979063 2 6 31.312838 29.963003 2