Yanıtlar:
Temel diziye erişebilir ve tolist
yöntemini çağırabilirsiniz :
>>> df = pd.DataFrame([[1,2,3],[3,4,5]])
>>> lol = df.values.tolist()
>>> lol
[[1L, 2L, 3L], [3L, 4L, 5L]]
df.to_numpy().tolist()
.
Verilerin korumak istediğiniz sütun ve dizin etiketleri varsa, birkaç seçenek vardır.
Örnek veriler:
>>> 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()
Diğer yanıtlar tarif edilen yöntem yararlıdır ancak verimler sadece çekirdek veri - daki ihtiyaçlarına bağlı olarak, yeterli olmayabilir olan.
>>> df.values.tolist()
[[1, 2, 3], [3, 4, 5]]
Bir yaklaşım, DataFrame
kullanarak json'a dönüştürmek df.to_json()
ve sonra tekrar ayrıştırmaktır. Bu külfetli bir işlemdir ancak bazı avantajları vardır, çünkü to_json()
yöntemin bazı yararlı seçenekleri vardır.
>>> 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]]
}
Hantal ama yararlı olabilir.
İyi haber şu ki, sütunlar ve satırlar için listeler oluşturmak oldukça basittir:
>>> columns = [df.index.name] + [i for i in df.columns]
>>> rows = [[i for i in row] for row in df.itertuples()]
Bu, şunları verir:
>>> print(f"columns: {columns}\nrows: {rows}")
columns: [None, 'first', 'second', 'third']
rows: [['alpha', 1, 2, 3], ['beta', 3, 4, 5]]
Eğer None
dizinin adı can sıkıcı olduğu gibi yeniden adlandırın:
df = df.rename_axis('stage')
Sonra:
>>> 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()
ya DataFrame.to_records()
bütün bunlar için?
Dizini korumak istedim, bu yüzden orijinal cevabı bu çözüme uyarladım:
list_df = df.reset_index().values.tolist()
Şimdi onu başka bir yere yapıştırabilir (örneğin bir Stack Overflow sorusuna yapıştırabilir) ve sonra onu yeniden oluşturabilirsiniz:
pd.Dataframe(list_df, columns=['name1', ...])
pd.set_index(['name1'], inplace=True)
İhtiyaçlarınıza uyup uymayacağını bilmiyorum, ancak şunları da yapabilirsiniz:
>>> lol = df.values
>>> lol
array([[1, 2, 3],
[3, 4, 5]])
Bu, ndarray modülünden gelen, tüm olağan numpy dizi şeylerini yapmanıza izin veren, sadece uyuşmuş bir dizidir.
Belki bir şeyler değişti ama bu, ihtiyacım olanı yapan bir ndarray listesi verdi.
list(df.values)
Not: Stack Overflow'da Pandas Series veya DataFrame'i NumPy dizisine veya düz Python listelerine dönüştürmenin tamamen gereksiz olduğu birçok durum gördüm. Kitaplıkta yeniyseniz, ihtiyacınız olan işlevselliğin bu Pandas nesneleri tarafından zaten sunulup sunulmadığını iki kez kontrol etmeyi düşünün.
@Jpp tarafından bir yorum alıntılamak için:
Pratikte , NumPy dizisini bir liste listesine dönüştürmeye genellikle gerek yoktur.
Bir Pandas DataFrame / Serisi çalışmazsa, yerleşik DataFrame.to_numpy
ve Series.to_numpy
yöntemleri kullanabilirsiniz.
for elem in some_series.values.tolist():
çünkü onlar bir serinin unsurlarını yineleyebileceğinizi bilmiyorlar. Bu cevabın neyin bu kadar kötü olduğundan emin değilim.
"df.values" bir uyuşmuş dizi döndürür. Bu, veri türlerini korumaz. Bir tam sayı, kayan noktaya dönüştürülebilir.
df.iterrows (), veri türlerini korumayı da garanti etmeyen bir dizi döndürür. Görmek: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.iterrows.html
Aşağıdaki kod bir liste listesine dönüştürülür ve veri türlerini korur:
rows = [list(row) for row in df.itertuples()]
Verilen Dataframe'in her satırını yinelemek ve her satırın verilerinden bir liste oluşturmak için DataFrame.iterrows () işlevini kullanabiliriz:
# 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)
Verilen veri çerçevesinin her satırını bir listeye başarıyla çıkarabiliriz
L
eklenen e-postalar var ?