Python-Pandasql-IIf函数不起作用错误

时间:2019-07-18 09:48:57

标签: python pandas sqlite ms-access pandasql

尝试执行以下代码:

import pandas as pd
import pandasql as ps

df = pd.DataFrame({'A':[5,6,7], 'B':[7,8,9]})
print(df)

       A  B
    0  5  7
    1  6  8
    2  7  9

qry = """SELECT df.*, IIf(A Is Null,[B],[A]) AS NEW_A FROM df;"""
df1 = ps.sqldf(qry, globals())
print(df1)

产生此错误:

PandaSQLException: (sqlite3.OperationalError) no such function: IIf 
[SQL: 'SELECT df.*, IIf(A Is Null,[B],[A]) AS NEW_A FROM df;']

我已经尝试过关于方括号,全局变量/局部变量等的不同语法的各种组合,但是找不到问题。这个功能根本不存在吗?

我只是从MS Access查询中复制了SQL查询,但在其他情况下,效果很好。

1 个答案:

答案 0 :(得分:2)

SQLite 中没有iif()函数。
在这种情况下,您可以使用coalesce()

SELECT df.*, coalesce(A, B) AS NEW_A FROM df

iif()的功能可以通过CASE语句来实现:

SELECT df.*, CASE WHEN A is null THEN B ELSE A END AS NEW_A FROM df

,但是在这种情况下,coalesce()更简单。