使用 pandas 和 sqldf 并得到一个无法描述的错误

Posted

技术标签:

【中文标题】使用 pandas 和 sqldf 并得到一个无法描述的错误【英文标题】:Using pandas and sqldf and getting a nondescript error 【发布时间】:2013-06-08 15:25:26 【问题描述】:

我决定使用 Pandas 进行一些数据分析,并使用使用 sqlite3 语法的组合 sqldf 库。问题是我收到了一个非 discript 错误。我认为这是我的 sql 语法,但没有什么让我眼前一亮。

错误:

Error on sql  SELECT u.chromosome, u.transcript_affected, u.ensembl_gene_id, u.gene_name ,u.strand, s.transcript_affected, s.ensembl_gene_id, s.gene_name FROM utr_file u INNER JOIN ssm_file s ON u.chromosome= s.chromosome AND u.strand = s.chromosome_strand WHERE s.chromosome_start BETWEEN u.start AND u.end ORDER BY u.chromosome;

SQL 行(也在上面的错误中):

 q = ''' SELECT u.chromosome, u.transcript_affected, u.ensembl_gene_id, u.gene_name ,u.strand, s.transcript_affected, s.ensembl_gene_id, s.gene_name FROM utr_file u INNER JOIN ssm_file s ON u.chromosome= s.chromosome AND u.strand = s.chromosome_strand WHERE s.chromosome_start BETWEEN u.start AND u.end ORDER BY u.chromosome;'''

 qsubset= sqldf(q,globals())

目标: 我试图确定 ssm_file 中的突变(按位置)在 utr_file 中匹配(在开始和结束之间)。我还需要先通过染色体和链进行匹配。

utr 文件示例:

  chromosome     start       end                              gene_name strand  
0       chr1  67208778  67210768    NM_032291_utr3_24_0_chr1_67208779_f   +
1       chr1  48998526  48999844     NM_032785_utr3_0_0_chr1_48998527_r   -
2       chr1  16785385  16786584     NM_018090_utr3_7_0_chr1_16785386_f   +
3       chr1  33585783  33585995    NM_052998_utr3_11_0_chr1_33585784_f   +
4       chr1  16785385  16786584  NM_001145278_utr3_7_0_chr1_16785386_f   +

ssm_file 示例:

  chromosome  chromosome_start  chromosome_strand transcript_affected  \
0       chr1         100951090                  +     ENSG00000079335   
1       chr1         100951090                  +     ENSG00000079335   
2       chr1         100951090                  +     ENSG00000079335   
3       chr1         100951090                  +     ENSG00000079335   
4       chr1         100951090                  +     ENSG00000079335   

   ensembl_gene_id gene_name  
0  ENST00000544534    CDC14A  
1  ENST00000542213    CDC14A  
2  ENST00000370125    CDC14A  
3  ENST00000361544    CDC14A  
4  ENST00000336454    CDC14A

【问题讨论】:

【参考方案1】:

您似乎遇到了一些列位置问题。我没有安装 Pandas,但是这个查询对在 sqlite 中创建的临时表起作用:

SELECT u.chromosome, u.gene_name ,u.strand, s.transcript_affected, 
s.ensembl_gene_id, s.gene_name FROM utr_file u INNER JOIN ssm_file s ON u.chromosome=
s.chromosome AND u.strand = s.chromosome_strand
WHERE s.chromosome_start BETWEEN u.start AND u.end ORDER BY u.chromosome;

我已从选择中删除了 u.ensembl_gene_id 和 u.transcript_affected,因为这些列仅出现在 ssm_file 中。

【讨论】:

以上是关于使用 pandas 和 sqldf 并得到一个无法描述的错误的主要内容,如果未能解决你的问题,请参考以下文章

将 RpostgreSQL 与 sqldf 一起使用会使 R 崩溃

SQLDF 提取值并将其保存到文本文件

R SQLDF 仅提取一个值

R中利用SQL语言读取数据框(sqldf库的使用)

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

应用 pandas udf 后无法使用 .toPandas() 或 .collect():IndexError