在数据帧内的列表中查找最小值,并出现 TypeError: 'float' object is not iterable

问题描述 投票:0回答:1

我生成了一个包含一列列表的 Dataframe,但如果没有值,则会出现 NaN。

import pandas as pd
df = pd.DataFrame(columns=['Lists', 'Min'])
df['Lists'] = [ [1,2,3], [4,5,6], [7,8,9], float('NaN') ]
print(df)

       Lists  Min
0  [1, 2, 3]  NaN
1  [4, 5, 6]  NaN
2  [7, 8, 9]  NaN
3        NaN  NaN

我希望

df['Min']
包含同一行中相应列表的最小值。因此:

       Lists  Min
0  [1, 2, 3]  1
1  [4, 5, 6]  4
2  [7, 8, 9]  7
3        NaN  NaN

但是,当我尝试列表理解时,我收到错误。

df['Min'] = [min(x) for x in df.Lists.tolist()]

产生错误

TypeError: 'float' object is not iterable

如何找到每个列表中的最小值?

python pandas dataframe list nested-lists
1个回答
0
投票

棘手的部分是列表理解无法迭代第四行中的值,

NaN
。这就是导致“浮动”错误的原因。

解决此问题的一种方法是将列表中的所有

NaN
替换为
NaN
,如下所示:
[NaN]

df['Lists'] = df['Lists'].fillna({i: [float('NaN')] for i in df.index})
df['Min'] = [min(x) for x in df.Lists.tolist()]
print(df)

       Lists  Min
0  [1, 2, 3]  1.0
1  [4, 5, 6]  4.0
2  [7, 8, 9]  7.0
3      [nan]  NaN
© www.soinside.com 2019 - 2024. All rights reserved.