如何在DataFrame列中过滤数字字符串列表


d = {'col1': "{35.1, 43.76, 41.5, 38.71}", 'col2': [3, 4]}
df = pd.DataFrame(data=d)

假设我无法直接访问D(并且D可能包含比所示的行还要多(,则我想过滤Col1中编码的值,以便所有数字值都在指定的间隔内。假设间隔为[40,45],那么预期的结果将是:

{'col1': "{43.76, 41.5}", 'col2': [3, 4]}

这是以某种方式以优雅的pythonic方式吗?

literal_eval

from ast import literal_eval
pred = lambda x: 40 <= x <= 45
lamb = lambda s: str({*filter(pred, literal_eval(s))})
df.assign(col1=df.col1.apply(lamb))
            col1  col2
0  {41.5, 43.76}     3
1  {41.5, 43.76}     4

使用 literal_val转换为 setmap以下条件,以下条件:

import ast
df['col1'] = df.col1.map(lambda x: {item for item in ast.literal_eval(x) if (40<=item <=45)})

Out[1734]:
            col1  col2
0  {43.76, 41.5}     3
1  {43.76, 41.5}     4

最新更新