【问题标题】:Getting no such table error using pandas and sqldf使用 pandas 和 sqldf 不会出现此类表错误
【发布时间】:2017-02-08 09:04:27
【问题描述】:

我收到一个 sqlite3 错误。

OperationalError: no such table: Bills

我首先使用 pandas 调用我的数据帧,然后在我的查询中调用那些工作正常的数据帧

import pandas as pd
from pandasql import sqldf

Bills = pd.read_csv("Bills.csv")
Accessorials = pd.read_csv("Accessorials.csv")

q = """
Select          
            CityStateLane, 
            Count(BillID) as BillsCount, 
            Sum(BilledAmount) as BillsSum, 
            Count(Distinct CarrierName) as NumberOfCarriers, 
            Avg(BilledAmount) as BillsAverage, 
            Avg(BilledWeight) as WeightAverage
From 
            Bills
Where 
            Direction = 'THIRD PARTY' 
Group by 
            CityStateLane
Order by 
            BillsCount DESC
"""

topCityStateLane = sqldf(q)

然后我使用另一个查询创建另一个数据框,但这会调用错误提示 Bills 不存在,即使我在上一个查询中成功使用了它。

q = """
SELECT
         Bills.BillID as BillID,
         A2.TotalAcc as TotalAcc
FROM
            (SELECT
                    BillID_Value,
                    SUM(PaidAmount_Value) as "TotalAcc"
            FROM  
                    Accessorials 
            GROUP BY
                    BillID_Value 
            ) AS  A2,
            Bills 
WHERE    
            A2.BillID_Value  = Bills.BillID
 """
temp = sqldf(q)

感谢您抽出宝贵时间阅读本文。

【问题讨论】:

    标签: python sql pandas dataframe sqldf


    【解决方案1】:

    您是否尝试将 Bills 与 A2 表连接起来?您不能在一个 select from 语句中从两个表中选择列。

    q = """
    SELECT
             Bills.BillID as BillID,
             A2.TotalAcc as TotalAcc
    FROM
                (SELECT
                        BillID_Value,
                        SUM(PaidAmount_Value) as "TotalAcc"
                FROM  
                        Accessorials 
                GROUP BY
                        BillID_Value 
                ) AS  A2 
                join Bills 
                on A2.BillID_Value  = Bills.BillID
     """
    temp = sqldf(q)
    

    【讨论】:

      【解决方案2】:
                  ) AS  A2,
              Bills 
      

      我认为这就是您的问题所在。您没有在 FROM 子句中调用 Bills 表,而是从您使用 alas A2 编写的子查询中调用返回表。换句话说,您的 From 子句指向 A2 'table' 而不是 Bills。正如 Qianbo Wang 提到的,如果您想从这两个单独的表中返回输出,您必须将它们连接在一起。

      【讨论】:

        猜你喜欢
        • 2014-06-20
        • 2020-10-09
        • 1970-01-01
        • 1970-01-01
        • 2019-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-21
        相关资源
        最近更新 更多