我生成了一个包含一列列表的 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
如何找到每个列表中的最小值?
棘手的部分是列表理解无法迭代第四行中的值,
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