Hướng dẫn nested list to dataframe python - danh sách lồng vào python dataframe

Một cách để làm điều này là lấy tên cột làm danh sách riêng và sau đó chỉ đưa ra từ chỉ số 1 cho pd.DataFrame -

In [8]: data = [['Name','Rank','Complete'],
   ...:                ['one', 1, 1],
   ...:                ['two', 2, 1],
   ...:                ['three', 3, 1],
   ...:                ['four', 4, 1],
   ...:                ['five', 5, 1]]

In [10]: df = pd.DataFrame(data[1:],columns=data[0])

In [11]: df
Out[11]:
    Name  Rank  Complete
0    one     1         1
1    two     2         1
2  three     3         1
3   four     4         1
4   five     5         1

Nếu bạn muốn đặt cột đầu tiên Name làm chỉ mục, hãy sử dụng phương thức

In [16]: df = pd.DataFrame(data[1:],columns=data[0]).set_index('Name')

In [17]: df
Out[17]:
       Rank  Complete
Name
one       1         1
two       2         1
three     3         1
four      4         1
five      5         1
0 và gửi cột để sử dụng cho chỉ mục. Thí dụ -

In [16]: df = pd.DataFrame(data[1:],columns=data[0]).set_index('Name')

In [17]: df
Out[17]:
       Rank  Complete
Name
one       1         1
two       2         1
three     3         1
four      4         1
five      5         1

Ảnh của Didssph trên unsplash

Trong bài viết này, tôi đang chuyển đổi danh sách lồng nhau thành một danh sách duy nhất. Chúng tôi sẽ chuyển đổi danh sách phẳng thành một khung dữ liệu. Cấu trúc của một danh sách lồng nhau trông tương tự như thế này: [[Danh sách 1], [Danh sách 2], [list3], .., [Danh sách n]].

Đây là một phần của quy trình xử lý dữ liệu để tạo trang Bản đồ HTML được hiển thị bên dưới.

Sản phẩm cuối cùng

Trong bài viết trước, tôi đã làm săm một trang web bằng cách sử dụng Beautifulsoup và dữ liệu được lấy dưới dạng danh sách lồng nhau. Trong bài viết này, tôi đang chuyển đổi danh sách lồng nhau thành một danh sách duy nhất.

Nhập danh sách lồng nhau từ tệp văn bản

Bạn có thể làm theo các bước được cung cấp trong bài viết trước để tạo danh sách lồng nhau của bạn hoặc tải xuống danh sách lồng nhau từ kho lưu trữ GitHub của tôi. Tệp sta.txt, chứa một danh sách các tên trạm lồng nhau và ‘add.txt, chứa một danh sách lồng nhau các địa chỉ trạm tương ứng.

# 'sta.txt' contains nested list of stations 
content = open("sta.txt", "r")
sta = eval(content.read())
content.close()

# 'add.txt' contains nest list of corresponding station addresses
content = open("add.txt", "r")
add = eval(content.read())
content.close()

Một biến mới được tạo từ ‘sta, để chuyển đổi danh sách lồng nhau thành một danh sách duy nhất. Mã sau đây được sử dụng để làm phẳng danh sách lồng nhau ‘STA, vào một danh sách có tên là‘ All_stations.

# sta is a nested list [[],[],[]]
all_stations = []
for stations in sta:
for station in stations:
all_stations.append(station)

Quá trình tương tự được lặp lại để chuyển đổi một danh sách lồng nhau ‘Thêm vào một danh sách duy nhất‘ all_address. Mã được đưa ra dưới đây:

# add is a nested list [[],[],[]]
all_address = []
for addresses in add:
for address in addresses:
all_address.append(address)

Chuyển đổi danh sách thành DataFrame

Để tạo DataFrame, trước tiên chúng tôi sẽ gán danh sách mới được tạo cho pd.dataframe và gán tên cột là ‘Trạm. Chúng tôi cũng sẽ thêm một cột chứa các địa chỉ trạm. Cả hai dòng mã được đưa ra dưới đây.

df = pd.DataFrame(all_stations,columns=['Stations'])df['Address'] = all_addressdf.head(10)
DataFrame

Bài viết tiếp theo sẽ trích xuất thông tin liên quan đến tọa độ vĩ độ và theo chiều dọc dựa trên các địa chỉ được trích xuất từ ​​trang web và được lưu trữ trong DataFrame. Bạn có thể đọc bài viết tiếp theo ở đây: Phần 3: Tìm vĩ độ và kinh độ địa chỉ bằng cách sử dụng API Googlemaps

Danh sách lồng nhau để liệt kê trong Python

Danh sách lồng nhau trong Python có thể được chuyển đổi thành một danh sách phẳng trong Python chỉ bằng ba dòng mã. Chúng ta hãy giả sử rằng bạn có một danh sách lồng nhau sau.

In [16]: df = pd.DataFrame(data[1:],columns=data[0]).set_index('Name')

In [17]: df
Out[17]:
       Rank  Complete
Name
one       1         1
two       2         1
three     3         1
four      4         1
five      5         1
1

Bây giờ, danh sách trên là một danh sách lồng nhau với nhiều cấp độ và chúng tôi muốn chuyển đổi nó thành danh sách bằng cách sử dụng Python:-

In [16]: df = pd.DataFrame(data[1:],columns=data[0]).set_index('Name')

In [17]: df
Out[17]:
       Rank  Complete
Name
one       1         1
two       2         1
three     3         1
four      4         1
five      5         1
2

Danh sách lồng nhau vào Danh sách - Python - Cách dài hơn

Trước hết, tôi sẽ chỉ cho bạn một cách dài hơn, mà không cần sử dụng bất kỳ mô-đun bên thứ ba nào. Để chuyển đổi danh sách lồng nhau thành danh sách phẳng, chúng tôi sẽ sử dụng mã sau:-

flat_list = []

def flatten_list(input_list):

    for item in input_list:
        if type(item) == list:
            flatten_list(item)
        else:
            flat_list.append(item)
    return flat_list

print(flatten_list(nested_list))

# output

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Danh sách lồng nhau chỉ trong ba dòng mã

Đó là cách dài hơn. Bây giờ chúng tôi sẽ sử dụng chức năng phẳng của Pandas, từ pandas.core.common để làm tương tự chỉ trong ba dòng mã.

from pandas.core.common import flatten

nested_list = [1, 2, [3, 4, [5, 6]], 7, 8, [9, [10]]]

print(list(flatten(nested_list)))

# Output

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Nếu bạn thích hướng dẫn của chúng tôi, có nhiều cách khác nhau để hỗ trợ chúng tôi, dễ nhất là chia sẻ bài đăng này. Bạn cũng có thể theo dõi chúng tôi trên Facebook, Twitter và YouTube.

Trong trường hợp của bất kỳ truy vấn nào, bạn có thể để lại nhận xét bên dưới.

Bạn có thể hỗ trợ chúng tôi thông qua Patreon