如何在数据框列中过滤数字字符串列表?

时间:2019-05-15 21:14:35

标签: python pandas

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方式实现?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

使用literal_val转换为set并使用map进行转换和过滤,条件如下:

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