Powiedzmy, że mam słownik z 10 parami klucz-wartość. Każdy wpis zawiera tablicę numpy. Jednak długość tablicy nie jest taka sama dla wszystkich.
Jak mogę utworzyć ramkę danych, w której każda kolumna zawiera inny wpis?
Kiedy próbuję:
pd.DataFrame(my_dict)
Dostaję:
ValueError: arrays must all be the same length
Jakiś sposób, aby to przezwyciężyć? Cieszę się, że Pandy używają NaN
tych kolumn do wypełniania krótszych wpisów.
pd.Series(...)
(zakładającimport pandas as pd
w sekcji importu)pd.DataFrame({k: pd.Series(l) for k, l in d.items()})
Oto prosty sposób, aby to zrobić:
źródło
columns
ale to już jest ustawienie domyślne. Zobacz dokumentację pand - pandas.DataFrame.from_dictSposób na uporządkowanie składni, ale nadal zasadniczo to samo, co w przypadku innych odpowiedzi, znajduje się poniżej:
Podobna składnia istnieje również dla list:
Inna składnia list to:
Możesz dodatkowo transponować wynik i / lub zmienić typy danych w kolumnie (zmiennoprzecinkowe, całkowite itp.).
źródło
Chociaż nie stanowi to bezpośredniej odpowiedzi na pytanie PO. Okazało się, że jest to doskonałe rozwiązanie w moim przypadku, gdy miałem nierówne tablice i chciałbym się podzielić:
z dokumentacji pand
źródło
Możesz także użyć
pd.concat
wrazaxis=1
z listąpd.Series
obiektów:źródło
Obie poniższe linie działają idealnie:
Ale z% timeit na Jupyter, mam stosunek prędkości 4x dla B do A, co jest dość imponujące, szczególnie podczas pracy z ogromnym zestawem danych (głównie z dużą liczbą kolumn / funkcji).
źródło
Jeśli nie chcesz, aby był wyświetlany
NaN
i masz dwie określone długości, dodanie „spacji” w każdej pozostałej komórce również zadziała.Jeśli masz więcej niż 2 długości wpisów, zaleca się utworzenie funkcji, która używa podobnej metody.
źródło
pd.DataFrame ([my_dict]) wystarczy!
źródło