为啥我的程序使用 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。研究所有类型的联接,以便了解它们的工作原理。
【讨论】:
NoWHERE
子句表示返回所有行。
@tdelozie Yah 试过了。 for left join 它在 stat_id_cd 下没有返回以上是关于为啥我的程序使用 sqldf 返回空数据框的主要内容,如果未能解决你的问题,请参考以下文章
Swift - 为啥 Process.arguments 返回空数组