У меня есть DataFrame
, где один столбец содержит списки в качестве содержимого ячейки, что-то вроде следующего:
import pandas as pd
df = pd.DataFrame({
'col_lists': [[1, 2, 3], [5]],
'col_normal': [8, 9]
})
>>> df
col_lists col_normal
0 [1, 2, 3] 8
1 [5] 9
Я хотел бы применить некоторые преобразования к каждому элементу col_lists
, например:
df['col_lists'] = df.apply(
lambda row: [ None if (element % 2 == 0) else element for element in row['col_lists'] ],
axis=1
)
>>> df
col_lists col_normal
0 [1, None, 3] 8
1 [5] 9
С этим фреймом данных это работает как я ожидаю, однако, когда я применяю тот же код к другому фрейму данных, я получаю странный результат - для каждой строки столбец содержит только первый элемент списка:
df2 = pd.DataFrame({
'col_lists': [[1, 2], [5]], # length of first list is smaller here
'col_normal': [8, 9]
})
df2['col_lists'] = df2.apply(
lambda row: [ None if (element % 2 == 0) else element for element in row['col_lists'] ],
axis=1
)
>>> df2
col_lists col_normal
0 1.0 8
1 5.0 9
У меня два вопроса:
(1) Что здесь происходит?Почему я получаю правильный результат в случае df
, но не df2
?
(2) Как правильно применить некоторые преобразования к спискам в пределах DataFrame
?