Câu trả lời:
Bạn có thể truy cập vào mảng bên dưới và gọi tolist
phương thức của nó :
>>> df = pd.DataFrame([[1,2,3],[3,4,5]])
>>> lol = df.values.tolist()
>>> lol
[[1L, 2L, 3L], [3L, 4L, 5L]]
df.to_numpy().tolist()
.
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.
Dữ liệu mẫ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
Các tolist()
phương pháp được mô tả trong câu trả lời khác là hữu ích nhưng sản lượng chỉ có 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
sang json bằng cách sử dụng df.to_json()
và sau đó phân tích cú pháp lại. Điều này là rườm rà nhưng có một số lợi thế, bởi vì to_json()
phương pháp này 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]]
}
Rắc rối nhưng có thể hữu ích.
Tin tốt là việc xây dựng danh sách cho các cột và hàng khá đơn giản:
>>> columns = [df.index.name] + [i for i in df.columns]
>>> rows = [[i for i in row] for row in df.itertuples()]
Điều này mang lại:
>>> print(f"columns: {columns}\nrows: {rows}")
columns: [None, 'first', 'second', 'third']
rows: [['alpha', 1, 2, 3], ['beta', 3, 4, 5]]
Nếu None
tên của chỉ mục gây khó chịu, hãy đổ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]]
DataFrame.itertuples()
hoặc DataFrame.to_records()
cho tất cả những điều này?
Tôi không biết liệu nó có phù hợp với nhu cầu của bạn hay không, 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ả những thứ thông thường của mảng numpy.
Tôi muốn bảo toàn chỉ mục, vì vậy tôi đã điều chỉnh câu trả lời ban đầu cho giải pháp này:
list_df = df.reset_index().values.tolist()
Bây giờ bạn có thể dán nó vào một nơi khác (ví dụ: dán vào câu hỏi Stack Overflow) và sau đó tạo lại nó:
pd.Dataframe(list_df, columns=['name1', ...])
pd.set_index(['name1'], inplace=True)
Có thể điều gì đó đã thay đổi nhưng điều này đã trả lại một danh sách các ndarrays đã làm những gì tôi cần.
list(df.values)
Lưu ý: Tôi đã thấy nhiều trường hợp trên Stack Overflow trong đó việc chuyển đổi Chuỗi Pandas hoặc DataFrame thành mảng NumPy hoặc danh sách Python thuần túy là hoàn toàn không cần thiết. Nếu bạn là người mới sử dụng thư viện, hãy xem xét kiểm tra kỹ xem chức năng bạn cần đã được cung cấp bởi các đối tượng Pandas đó chưa.
Để trích dẫn một bình luận của @jpp:
Trong thực tế , thường không cần chuyển đổi mảng NumPy thành một danh sách danh sách.
Nếu Pandas DataFrame / Series không hoạt động, bạn có thể sử dụng các phương pháp DataFrame.to_numpy
và Series.to_numpy
phương pháp tích hợp sẵn.
for elem in some_series.values.tolist():
vì họ không biết rằng bạn có thể lặp lại các phần tử của một chuỗi. Tôi không chắc câu trả lời này có gì khủng khiếp.
Chúng ta có thể sử dụng hàm DataFrame.iterrows () để lặp qua từng hàng của Dataframe đã cho và tạo danh sách từ dữ liệu của mỗi hàng:
# 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)
Chúng tôi có thể trích xuất thành công từng hàng của khung dữ liệu đã cho thành một danh sách
L
thêm s trong đầu ra?