gpt4 book ai didi

python - 当单元格包含列表时, Pandas 适用

转载 作者:太空宇宙 更新时间:2023-11-03 15:40:47 29 4
gpt4 key购买 nike

我有一个 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 中的列表?

最佳答案

首先,我认为在 pandas 中使用 list 不是 good idea .

但如果真的需要它,请尝试升级 pandas,因为对我来说它在 pandas 0.23.4 中运行良好:

df2['col_lists'] = df2.apply(
lambda row: [ None if (element % 2 == 0) else element for element in row['col_lists'] ],
axis=1
)

print (df2)
col_lists col_normal
0 [1, None] 8
1 [5] 9

关于python - 当单元格包含列表时, Pandas 适用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52591372/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com