【发布时间】:2018-01-23 16:04:03
【问题描述】:
我正在尝试使用pandasql 在 Python 中编写查询。我的代码如下,
import pandas as pd
from pandasql import *
data = pd.read_csv('registerlog.csv')
q = """
SELECT
a.RegistrationMonth, COUNT(DISTINCT a.UserID) AS UserSize,
COUNT(
CASE a.MonthDifference
WHEN 0.0 THEN DISTINCT a.UserID ELSE NULL
END
) AS MonthZero
FROM
data) AS a
GROUP BY
a.RegistrationMonth
"""
print sqldf(q, locals())
但这会产生以下错误,
打印 sqldf(q, locals()) 文件 “C:\Python27\lib\site-packages\pandasql\sqldf.py”,第 156 行,在 sqldf 返回 PandaSQL(db_uri)(query, env) 文件“C:\Python27\lib\site-packages\pandasql\sqldf.py”,第 63 行,在 致电 raise PandaSQLException(ex) PandaSQLException: (sqlite3.OperationalError) near "DISTINCT": 语法错误
但如果我使用WHEN 0.0 THEN a.user_id ELSE NULL,那么它可以工作。 COUNT(DISTINCT a.user_id) 的正常方式也可以正常工作。
但我只想获取CASE 中的DISTINCT 值。有没有办法实现这一点以获取CASE 内的DISTINCT 计数值?
【问题讨论】:
-
你试过
COUNT(DISTINCT (CASE ... END)) AS MonthZero吗? -
做了一些搜索,似乎在 CASE 语句中使用 DISTINCT 是有问题的...stackoverflow.com/questions/25687345/…
标签: python pandas sqlite pandasql