ง่ายต่อการเปลี่ยนรายชื่อเป็นกรอบข้อมูลแพนด้า:
import pandas as pd
df = pd.DataFrame([[1,2,3],[3,4,5]])
แต่ฉันจะเปลี่ยน df กลับเป็นลิสต์ได้อย่างไร
lol = df.what_to_do_now?
print lol
# [[1,2,3],[3,4,5]]
ง่ายต่อการเปลี่ยนรายชื่อเป็นกรอบข้อมูลแพนด้า:
import pandas as pd
df = pd.DataFrame([[1,2,3],[3,4,5]])
แต่ฉันจะเปลี่ยน df กลับเป็นลิสต์ได้อย่างไร
lol = df.what_to_do_now?
print lol
# [[1,2,3],[3,4,5]]
คำตอบ:
คุณสามารถเข้าถึงอาร์เรย์พื้นฐานและเรียกtolist
ใช้เมธอด:
>>> df = pd.DataFrame([[1,2,3],[3,4,5]])
>>> lol = df.values.tolist()
>>> lol
[[1L, 2L, 3L], [3L, 4L, 5L]]
df.to_numpy().tolist()
หากข้อมูลมีป้ายชื่อคอลัมน์และดัชนีที่คุณต้องการเก็บรักษาไว้มีตัวเลือกบางอย่าง
ตัวอย่างข้อมูล:
>>> 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()
วิธีการที่อธิบายไว้ในคำตอบอื่น ๆ ที่เป็นประโยชน์ แต่อัตราผลตอบแทนเพียงข้อมูลหลัก - ซึ่งอาจจะไม่เพียงพอทั้งนี้ขึ้นอยู่กับความต้องการของคุณ
>>> df.values.tolist()
[[1, 2, 3], [3, 4, 5]]
วิธีหนึ่งคือการแปลงเป็นDataFrame
json โดยใช้df.to_json()
แล้วแยกวิเคราะห์อีกครั้ง นี่เป็นเรื่องยุ่งยาก แต่มีข้อดีบางประการเนื่องจากto_json()
วิธีนี้มีตัวเลือกที่เป็นประโยชน์
>>> 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]]
}
ยุ่งยาก แต่อาจมีประโยชน์
ข่าวดีก็คือการสร้างรายการสำหรับคอลัมน์และแถวนั้นค่อนข้างตรงไปตรงมา:
>>> columns = [df.index.name] + [i for i in df.columns]
>>> rows = [[i for i in row] for row in df.itertuples()]
สิ่งนี้ให้ผล:
>>> print(f"columns: {columns}\nrows: {rows}")
columns: [None, 'first', 'second', 'third']
rows: [['alpha', 1, 2, 3], ['beta', 3, 4, 5]]
หากNone
เป็นชื่อของดัชนีที่น่ารำคาญให้เปลี่ยนชื่อ:
df = df.rename_axis('stage')
จากนั้น:
>>> 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()
หรือDataFrame.to_records()
สำหรับทั้งหมดนี้?
ฉันต้องการรักษาดัชนีดังนั้นฉันจึงปรับคำตอบเดิมสำหรับโซลูชันนี้:
list_df = df.reset_index().values.tolist()
ตอนนี้คุณสามารถวางไว้ที่อื่นได้ (เช่นวางในคำถาม Stack Overflow) แล้วสร้างใหม่:
pd.Dataframe(list_df, columns=['name1', ...])
pd.set_index(['name1'], inplace=True)
ฉันไม่รู้ว่ามันจะตรงกับความต้องการของคุณหรือเปล่า แต่คุณสามารถทำได้:
>>> lol = df.values
>>> lol
array([[1, 2, 3],
[3, 4, 5]])
นี่เป็นเพียงอาร์เรย์ numpy จากโมดูล ndarray ซึ่งช่วยให้คุณทำสิ่งต่างๆที่เป็นอาร์เรย์ numpy ตามปกติได้
อาจจะมีบางอย่างเปลี่ยนไป แต่สิ่งนี้ทำให้รายการ ndarrays กลับมาซึ่งทำในสิ่งที่ฉันต้องการ
list(df.values)
หมายเหตุ:ฉันเคยเห็นหลายกรณีใน Stack Overflow ที่การแปลง Pandas Series หรือ DataFrame เป็นอาร์เรย์ NumPy หรือรายการ Python ธรรมดานั้นไม่จำเป็นเลย หากคุณเพิ่งเริ่มใช้ไลบรารีให้ลองตรวจสอบอีกครั้งว่าฟังก์ชันที่คุณต้องการนั้นมีให้โดยวัตถุเหล่านั้น
หากต้องการเสนอความคิดเห็นโดย @jpp:
ในทางปฏิบัติมักไม่จำเป็นต้องแปลงอาร์เรย์ NumPy ให้เป็นลิสต์
หาก Pandas DataFrame / Series ไม่ทำงานคุณสามารถใช้บิวท์อินDataFrame.to_numpy
และSeries.to_numpy
วิธีการ
for elem in some_series.values.tolist():
เพราะพวกเขาไม่รู้ว่าคุณสามารถทำซ้ำในองค์ประกอบของซีรีส์ได้ ฉันไม่แน่ใจว่าคำตอบนี้แย่มาก
สิ่งนี้ง่ายมาก:
import numpy as np
list_of_lists = np.array(df)
DataFrame.values
หรือDataFrame.to_numpy()
? ไม่ต้องกังวลว่าจะสร้างอาร์เรย์ NumPy ไม่ใช่รายการ Python ธรรมดา
"df.values" ส่งกลับอาร์เรย์จำนวนนับ สิ่งนี้ไม่ได้รักษาชนิดข้อมูลไว้ จำนวนเต็มอาจถูกแปลงเป็นทศนิยม
df.iterrows () ส่งคืนชุดข้อมูลซึ่งไม่รับประกันว่าจะรักษาชนิดข้อมูลไว้ด้วย ดู: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.iterrows.html
โค้ดด้านล่างจะแปลงเป็นรายการและเก็บรักษาชนิดข้อมูลไว้:
rows = [list(row) for row in df.itertuples()]
เราสามารถใช้ฟังก์ชัน DataFrame.iterrows () เพื่อวนซ้ำในแต่ละแถวของ Dataframe ที่กำหนดและสร้างรายการจากข้อมูลของแต่ละแถว:
# 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)
เราสามารถแยกแต่ละแถวของกรอบข้อมูลที่กำหนดให้เป็นรายการได้สำเร็จ
L
ต่อท้ายในเอาต์พุต