【问题标题】:How to df to a conditional string in python?如何在python中对条件字符串进行df转换?
【发布时间】:2021-02-16 11:47:45
【问题描述】:

我是 pandas 的新手,我遇到了将 df 添加到字符串的问题。所以我有一个像"'bikes'>20" 这样的条件字符串语句,其中bikes 是数据框中的列名。现在我想在“自行车”之前添加 df,我该怎么做?我在下面使用了这段代码,但它不起作用 我的代码:

x="'bikes'> 20"
x = re.sub(r"([> =!<]==)", r'df[\1]', x)

这给出:'bikes'&gt; 20 但不添加 df

我想要的是:df['bikes']&gt;20

有什么办法吗?

【问题讨论】:

    标签: python pandas string dataframe python-re


    【解决方案1】:

    如果您根据需要替换它,它就不起作用,因为"df['bikes']&gt;20" 仍然是字符串,而不是像df['bikes']&gt;20 这样的标量比较的列。

    这里可以使用DataFrame.query:

    df = pd.DataFrame({'bikes':[20,39,44]})
    
    x="'bikes'> 20"
    
    df = df.query(x.replace("'",''))
    print (df)
       bikes
    1     39
    2     44
    

    工作方式:

    df = df.query("bikes > 20")
    print (df)
       bikes
    1     39
    2     44
    

    编辑:pandas.eval 的解决方案:

    x="'bikes'> 20"
    
    print (pd.eval("df." + x.replace("'",'')))
    0    False
    1     True
    2     True
    dtype: bool
    

    工作方式:

    print (pd.eval("df.bikes> 20"))
    

    对我来说不工作:

    print (pd.eval('df["bikes"]>20'))
        
    

    ValueError:数据类型必须提供项目大小

    【讨论】:

    • 虽然它是正确的。我正在寻找别的东西。所以当我添加 df['bikes']>20.它通常会给出我正在寻找的真假结果。
    • @krish - 我知道是什么意思,但是如果在这里替换 df[] 它将不起作用,因为仍然是字符串。
    • @jezreael-但我认为我可以使用 eval 来评估该字符串。
    • @krish like (df.eval("df['bikes']&gt;20")) with error UndefinedVariableError: name 'df' is not defined?
    • @krish - 可以用. 代替[],添加到答案中。
    猜你喜欢
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 2019-11-23
    • 2023-01-13
    相关资源
    最近更新 更多