我有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) 如何正确地将一些转换应用于 a 中的列表DataFrame
?