我有一个 Khung dữ liệu
, trong đó một cột chứa danh sách dưới dạng nội dung ô, như sau:
nhập gấu trúc dưới dạng pd
df = pd.DataFrame({
'col_lists': [[1, 2, 3], [5]],
'col_normal': [8, 9]
})
>>> df
danh sách col_col_normal
0 [1, 2, 3] 8
1 [5] 9
tôi nghĩ đúng danh sách col_
Áp dụng một số phép biến đổi cho từng phần tử, ví dụ:
df['col_lists'] = df.apply(
hàng lambda: [ Không có nếu (phần tử % 2 == 0) phần tử khác cho phần tử trong hàng['col_lists']],
trục=1
)
>>> df
danh sách col_col_normal
0 [1, Không có, 3] 8
1 [5] 9
Đối với khung dữ liệu này, nó hoạt động như tôi mong đợi, tuy nhiên, khi tôi áp dụng cùng một mã cho các khung dữ liệu khác, tôi nhận được một kết quả lạ - đối với mỗi hàng, cột chỉ chứa phần tử đầu tiên của danh sách:
df2 = pd.DataFrame({
'col_lists': [[1, 2], [5]], # độ dài của danh sách đầu tiên ở đây nhỏ hơn
'col_normal': [8, 9]
})
df2['col_lists'] = df2.apply(
hàng lambda: [ Không có nếu (phần tử % 2 == 0) phần tử khác cho phần tử trong hàng['col_lists']],
trục=1
)
>>> df2
danh sách col_col_normal
0 1,0 8
1 5,0 9
Tôi có hai câu hỏi:
(1) Chuyện gì đang xảy ra ở đây? tại sao ở df
thay vì df2
Trong trường hợp nào tôi nhận được kết quả chính xác?
(2) Cách áp dụng chính xác các phép biến đổi nhất định cho Khung dữ liệu
trong danh sách?
Đầu tiên, tôi nghĩ ở gấu trúc sử dụng danh sách
KHÔNG ý kiến hay .
Nhưng nếu bạn thực sự cần nó, hãy thử nâng cấp pandas vì đối với tôi nó là gấu trúc 0.23.4
Hoạt động tốt trong:
df2['col_lists'] = df2.apply(
hàng lambda: [ Không có nếu (phần tử % 2 == 0) phần tử khác cho phần tử trong hàng['col_lists']],
trục=1
)
in(df2)
danh sách col_col_normal
0 [1, Không có] 8
1 [5] 9
Tôi là một lập trình viên xuất sắc, rất giỏi!