To może być proste pytanie, ale nie mogę wymyślić, jak to zrobić. Powiedzmy, że mam dwie zmienne w następujący sposób.
a = 2
b = 3
Chcę zbudować DataFrame z tego:
df2 = pd.DataFrame({'A':a,'B':b})
To generuje błąd:
ValueError: Jeśli używasz wszystkich wartości skalarnych, musisz przekazać indeks
Próbowałem tego także:
df2 = (pd.DataFrame({'a':a,'b':b})).reset_index()
Daje to ten sam komunikat o błędzie.
index=0
, ale może to prowadzić do przypadkowego niewłaściwego użycia (myśląc, że pojedynczy słownik może w jakiś sposób stworzyć ramkę danych z wieloma wierszami)Możesz także użyć
pd.DataFrame.from_records
wygodniejszego, gdy masz już pod ręką słownik:Możesz także ustawić indeks, jeśli chcesz:
źródło
Najpierw musisz utworzyć serię pand. Drugim krokiem jest konwersja serii pand na ramkę danych pand.
Możesz nawet podać nazwę kolumny.
źródło
pd.Series(data).to_frame('ColumnName')
jest krótszy, chociaż ten odpowiednik jest być może bardziej bezpośredni:pd.DataFrame.from_dict(data, orient='index', columns=['ColumnName'])
Możesz spróbować zapakować słownik do listy
my_dict = {'A':1,'B':2}
pd.DataFrame([my_dict])
źródło
Może Series zapewni wszystkie potrzebne funkcje:
DataFrame można traktować jako zbiór serii, dlatego możesz:
Połącz wiele serii w jedną ramkę danych (jak opisano tutaj )
Dodaj zmienną Series do istniejącej ramki danych ( przykład tutaj )
źródło
Musisz podać iterowalne wartości dla kolumn Pandas DataFrame:
źródło
Miałem ten sam problem z tablicami numpy i rozwiązaniem jest ich spłaszczenie:
źródło
Jeśli zamierzasz przekonwertować słownik skalarów, musisz dołączyć indeks:
Chociaż indeks nie jest wymagany dla słownika list, ten sam pomysł można rozszerzyć na słownik list:
Oczywiście w przypadku słownika list można zbudować ramkę danych bez indeksu:
źródło
Możesz spróbować:
Z dokumentacji argumentu „orient”: jeśli kluczami przekazanego dict powinny być kolumny wynikowej DataFrame, przekaż „kolumny” (domyślnie). W przeciwnym razie, jeśli klucze powinny być wierszami, należy przekazać „indeks”.
źródło
code
Bardzo ważne słowa, aby były pogrubione , mniej ważne kursywa Kursywa W razie potrzeby używaj także listMagia pand w pracy. Cała logika jest wyłączona.
Komunikat o błędzie
"ValueError: If using all scalar values, you must pass an index"
mówi, że musisz przekazać indeks.Nie musi to oznaczać, że przekazanie indeksu powoduje, że pandy robią to, co chcesz
Po przejściu indeksu pandy będą traktować klucze słownika jako nazwy kolumn, a wartości jak to, co kolumna powinna zawierać dla każdej wartości w indeksie.
Przekazywanie większego indeksu:
Indeks jest zwykle generowany automatycznie przez ramkę danych, gdy nie jest podany. Jednak pandy nie wiedzą, ile rzędów
2
i3
chcesz. Możesz jednak wyrazić się bardziej otwarcieDomyślny indeks wynosi 0.
Podczas tworzenia ramek danych zalecałbym zawsze przekazywanie słownika list do konstruktora ramki danych. Łatwiej jest czytać innym programistom. Panda ma wiele ostrzeżeń, nie zmuszaj innych programistów, by czytali Twój kod.
źródło
dane wejściowe nie muszą być listą rekordów - może to być także pojedynczy słownik:
Co wydaje się równoważne z:
źródło
Wynika to z faktu, że DataFrame ma dwa intuicyjne wymiary - kolumny i wiersze.
Podajesz kolumny tylko przy użyciu kluczy słownika.
Jeśli chcesz określić tylko dane jednowymiarowe, użyj serii!
źródło
Konwertuj słownik na ramkę danych
Nadaj nową nazwę kolumnie
źródło
Jeśli masz słownik, możesz przekształcić go w ramkę danych pand za pomocą następującego wiersza kodu:
źródło
Wystarczy przekazać dyktando na liście:
źródło