2015-01-18 39 views
38

Thật dễ dàng để biến một danh sách liệt kê vào một dataframe gấu trúc:Pandas DataFrame để danh sách liệt kê

import pandas as pd 
df = pd.DataFrame([[1,2,3],[3,4,5]]) 

Nhưng làm thế nào để tôi bật DF trở lại vào một danh sách liệt kê?

lol = df.what_to_do_now? 
print lol 
# [[1,2,3],[3,4,5]] 
+3

lol tại biến số lol –

Trả lời

67

Bạn có thể truy cập vào các mảng cơ bản và gọi phương thức tolist của nó:

>>> df = pd.DataFrame([[1,2,3],[3,4,5]]) 
>>> lol = df.values.tolist() 
>>> lol 
[[1L, 2L, 3L], [3L, 4L, 5L]] 
+0

Hoàn hảo. Cảm ơn! – bumpkin

+0

Tại sao có 'L' nối vào đầu ra? –

+1

L có nghĩa là dài, trái với int. – user48956

2

Tôi không biết nếu nó sẽ phù hợp với nhu cầu của bạn, nhưng bạn cũng có thể làm:

>>> lol = df.values 
>>> lol 
array([[1, 2, 3], 
     [3, 4, 5]]) 

Đây chỉ là một mảng numpy từ mô-đun ndarray, cho phép bạn thực hiện tất cả các mảng mảng thông thường.

3

Nếu dữ liệu có nhãn cột và chỉ mục mà bạn muốn giữ lại, có một vài tùy chọn.

Ví dụ dữ liệu:

>>> 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 

Phương pháp tolist() được mô tả trong câu trả lời khác rất hữu ích nhưng chỉ có hiệu suất dữ liệu cốt lõi - mà có thể không đủ, tùy thuộc vào nhu cầu của bạn.

>>> df.values.tolist() 
[[1, 2, 3], [3, 4, 5]] 

Một cách tiếp cận là để chuyển đổi DataFrame để JSON sử dụng df.to_json() và sau đó phân tích nó một lần nữa. Điều này là cồng kềnh nhưng không có một số lợi thế, bởi vì phương pháp to_json() có một số tùy chọn hữu ích.

>>> 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]] 
} 

Cồng kềnh nhưng có thể hữu ích.

Tin tốt lành là nó khá đơn giản để xây dựng danh sách cho các cột và các hàng:

>>> columns = [df.index.name] + [i for i in df.columns] 
>>> rows = [[i for i in row] for row in df.itertuples()] 

sản lượng này:

>>> print(f"columns: {columns}\nrows: {rows}") 
columns: [None, 'first', 'second', 'third'] 
rows: [['alpha', 1, 2, 3], ['beta', 3, 4, 5]] 

Nếu None như tên của chỉ số này khó chịu, đổi tên nó:

df = df.rename_axis('stage') 

Sau đó:

>>> 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]] 
+0

Nếu bạn có chỉ mục đa cấp, tuple chỉ mục sẽ là phần tử đầu tiên của các hàng được tạo. Bạn sẽ cần thêm một bước để tách nó. – Konstantin

Các vấn đề liên quan