Odpowiedzi:
Możesz uzyskać dostęp do podstawowej tablicy i wywołać jej tolist
metodę:
>>> df = pd.DataFrame([[1,2,3],[3,4,5]])
>>> lol = df.values.tolist()
>>> lol
[[1L, 2L, 3L], [3L, 4L, 5L]]
df.to_numpy().tolist()
.
Jeśli dane mają etykiety kolumn i indeksów, które chcesz zachować, istnieje kilka opcji.
Przykładowe dane:
>>> df = pd.DataFrame([[1,2,3],[3,4,5]], \
columns=('first', 'second', 'third'), \
index=('alpha', 'beta'))
>>> df
first second third
alpha 1 2 3
beta 3 4 5
tolist()
Metoda opisana w innych odpowiedzi jest przydatne, ale przynosi tylko podstawowe dane - co może nie wystarczyć, w zależności od potrzeb.
>>> df.values.tolist()
[[1, 2, 3], [3, 4, 5]]
Jednym ze sposobów jest przekonwertowanie na DataFrame
json przy użyciu, df.to_json()
a następnie ponowne przeanalizowanie. Jest to kłopotliwe, ale ma pewne zalety, ponieważ to_json()
metoda ta ma kilka przydatnych opcji.
>>> df.to_json()
{
"first":{"alpha":1,"beta":3},
"second":{"alpha":2,"beta":4},"third":{"alpha":3,"beta":5}
}
>>> df.to_json(orient='split')
{
"columns":["first","second","third"],
"index":["alpha","beta"],
"data":[[1,2,3],[3,4,5]]
}
Uciążliwe, ale mogą być przydatne.
Dobra wiadomość jest taka, że tworzenie list dla kolumn i wierszy jest całkiem proste:
>>> columns = [df.index.name] + [i for i in df.columns]
>>> rows = [[i for i in row] for row in df.itertuples()]
To daje:
>>> print(f"columns: {columns}\nrows: {rows}")
columns: [None, 'first', 'second', 'third']
rows: [['alpha', 1, 2, 3], ['beta', 3, 4, 5]]
Jeśli None
nazwa indeksu jest uciążliwa, zmień jej nazwę:
df = df.rename_axis('stage')
Następnie:
>>> columns = [df.index.name] + [i for i in df.columns]
>>> print(f"columns: {columns}\nrows: {rows}")
columns: ['stage', 'first', 'second', 'third']
rows: [['alpha', 1, 2, 3], ['beta', 3, 4, 5]]
DataFrame.itertuples()
czy DataFrame.to_records()
do tego wszystkiego?
Chciałem zachować indeks, więc oryginalną odpowiedź dostosowałem do tego rozwiązania:
list_df = df.reset_index().values.tolist()
Teraz możesz wkleić go gdzie indziej (np. Aby wkleić do pytania Stack Overflow), a następnie odtworzyć:
pd.Dataframe(list_df, columns=['name1', ...])
pd.set_index(['name1'], inplace=True)
Nie wiem, czy będzie pasować do Twoich potrzeb, ale możesz też:
>>> lol = df.values
>>> lol
array([[1, 2, 3],
[3, 4, 5]])
To jest po prostu tablica numpy z modułu ndarray, która pozwala ci robić wszystkie zwykłe tablice numpy.
Może coś się zmieniło, ale to dało listę ndarrayów, które zrobiły to, czego potrzebowałem.
list(df.values)
Uwaga: widziałem wiele przypadków przepełnienia stosu, w których konwersja serii Pandas lub DataFrame do tablicy NumPy lub zwykłych list Pythona jest całkowicie niepotrzebna. Jeśli jesteś nowy w bibliotece, rozważ podwójne sprawdzenie, czy potrzebna funkcjonalność jest już oferowana przez te obiekty Pandas.
Cytując komentarz @jpp:
W praktyce często nie ma potrzeby konwertowania tablicy NumPy na listę list.
Jeśli Pandas DataFrame / Series nie będzie działać, możesz użyć wbudowanych DataFrame.to_numpy
i Series.to_numpy
metod.
for elem in some_series.values.tolist():
ponieważ nie wiedzą, że można iterować po elementach serii. Nie jestem pewien, co jest takiego okropnego w tej odpowiedzi.
„df.values” zwraca tablicę numpy. Nie zachowuje to typów danych. Liczba całkowita może zostać przekonwertowana na liczbę zmiennoprzecinkową.
df.iterrows () zwraca serię, która również nie gwarantuje zachowania typów danych. Zobacz: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.iterrows.html
Poniższy kod konwertuje do listy list i zachowuje typy danych:
rows = [list(row) for row in df.itertuples()]
Możemy użyć funkcji DataFrame.iterrows () do iteracji po każdym z wierszy danej Dataframe i skonstruowania listy z danych każdego wiersza:
# Empty list
row_list =[]
# Iterate over each row
for index, rows in df.iterrows():
# Create list for the current row
my_list =[rows.Date, rows.Event, rows.Cost]
# append the list to the final list
row_list.append(my_list)
# Print
print(row_list)
Możemy z powodzeniem wyodrębnić każdy wiersz danej ramki danych do listy
L
na wyjściu są dołączane s?