为啥我的程序使用 sqldf 返回空数据框

Posted

技术标签:

【中文标题】为啥我的程序使用 sqldf 返回空数据框【英文标题】:Why is my program returning empty dataframe using sqldf为什么我的程序使用 sqldf 返回空数据框 【发布时间】:2021-10-04 13:08:56 【问题描述】:

以下代码返回空数据框。使用 case 语句的原因是:如果 stat_genius 和 stat_npps 之间的 stat_id_cd 不匹配,则使用分隔符填充。以下代码适用于单行,但不能用于多行。

下面是数据帧 stat_genius 后跟 stat_npps 数据帧

POL_REF_NO POL_NUM STAT_ID_CD
MPK100 MPK1000 4A
MPK100 MPK1000 4B

下面是第二个数据框。

POL_REF_NO POL_NUM STAT_ID_CD
MPK100 MPK1000 4A
MPK100 MPK1000 4B
stat_result = sqldf('''
select 
   a.POL_REF_NO
   , a.POL_NUM
   , CASE     
      WHEN a.STAT_ID_CD = b.STAT_ID_CD THEN a.STAT_ID_CD
      ELSE a.STAT_ID_CD||' | '||b.STAT_ID_CD END AS STAT_ID_CD 
FROM stat_genius a  
JOIN stat_npps b on b.POL_REF_NO = a.POL_REF_NO and b.STAT_ID_CD = a.STAT_ID_CD''')

print(stat_result)

【问题讨论】:

多行的结果如何? @Barmar 一个空的数据框 这毫无意义。 SELECT 列表中的列不应影响返回的行数。这仅取决于 join 和 where 子句。 如果你只做SELECT a.POL_REF_NO, a.POL_NUM, a.STAT_ID_CD, b.STAT_ID_CD FROM ...会得到什么? 我们没有您的完整代码。 SELECT 语句仅提取所需的列。如果您的代码没有产生语法错误并且您得到 0 个返回记录,您可能需要查看数据是如何被拉入数据框的。使用df.head() 验证您的数据框,以确保代码实际上将数据拉入目标数据框。 【参考方案1】:

尝试使用 LEFT JOIN。研究所有类型的联接,以便了解它们的工作原理。

【讨论】:

No WHERE 子句表示返回所有行。 @tdelozie Yah 试过了。 for left join 它在 stat_id_cd 下没有返回

以上是关于为啥我的程序使用 sqldf 返回空数据框的主要内容,如果未能解决你的问题,请参考以下文章

为啥它返回一个空值?!!(客户端/服务器应用程序)

为啥我的数据表单元格返回空值?

Swift - 为啥 Process.arguments 返回空数组

为啥 Woocommerce API GET 请求返回一个空的购物车项目列表

为啥 futureBuilder 返回一个空值?

为啥我的数组在附加值后返回 null 或显示一个空数组