标签: pandasql

Python Pandas to_sql,如何用主键创建表?

我想用Pandas的to_sql函数创建一个MySQL表,它有一个主键(在mysql表中有一个主键通常很好),如下所示:

group_export.to_sql(con = db, name = config.table_group_export, if_exists = 'replace', flavor = 'mysql', index = False)
Run Code Online (Sandbox Code Playgroud)

但这会创建一个没有任何主键的表(甚至没有任何索引).

文档提到参数'index_label'与'index'参数结合使用可用于创建索引但不提及主键的任何选项.

文档

python mysql primary-key pandas pandasql

23
推荐指数
3
解决办法
3万
查看次数

AttributeError:“str”对象没有属性“_execute_on_connection”

我对以下代码有问题:

from pandasql import sqldf
import pandas as pd

df = pd.DataFrame({'column1': [1, 2, 3], 'column2': [4, 5, 6]})

query = "SELECT * FROM df WHERE column1 > 1"

new_dataframe = sqldf(query)

print(new_dataframe)
Run Code Online (Sandbox Code Playgroud)

当我提交时,出现以下错误:

Traceback (most recent call last):

  File ~\AppData\Local\Programs\Spyder\Python\lib\site-packages\sqlalchemy\engine\base.py:1410 in execute
    meth = statement._execute_on_connection

AttributeError: 'str' object has no attribute '_execute_on_connection'


The above exception was the direct cause of the following exception:

Traceback (most recent call last):

  File ~\AppData\Local\Programs\Spyder\pkgs\spyder_kernels\py3compat.py:356 in compat_exec
    exec(code, globals, locals)

  File c:\users\yv663dz\downloads\untitled1.py:18
    new_dataframe = …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy pandas pandasql

16
推荐指数
1
解决办法
2万
查看次数

在多个条件下合并DataFrame - 特别是在相等的值上

首先,对不起,如果这有点长,但我想完整地描述我遇到的问题以及我已经尝试过的问题.

我试图在多个条件下将两个数据帧对象连接(合并)在一起.如果要满足的条件都是"等于"运算符,我知道如何做到这一点,但是,我需要使用的不仅仅是更多.

数据框代表遗传信息:一个是基因组中的突变列表(称为SNP),另一个是基因在人类基因组上的位置信息.对它们执行df.head()会返回以下内容:

SNP DataFrame(snp_df):

   chromosome        SNP      BP
0           1  rs3094315  752566
1           1  rs3131972  752721
2           1  rs2073814  753474
3           1  rs3115859  754503
4           1  rs3131956  758144
Run Code Online (Sandbox Code Playgroud)

这显示了SNP参考ID及其位置.'BP'代表'Base-Pair'位置.

Gene DataFrame(gene_df):

   chromosome  chr_start  chr_stop        feature_id
0           1      10954     11507  GeneID:100506145
1           1      12190     13639  GeneID:100652771
2           1      14362     29370     GeneID:653635
3           1      30366     30503  GeneID:100302278
4           1      34611     36081     GeneID:645520
Run Code Online (Sandbox Code Playgroud)

该数据框显示了所有感兴趣的基因的位置.

我想知道的是所有属于基因组中基因区域的SNP,并丢弃那些在这些区域之外的SNP.

如果我想基于多个(等于)条件将两个数据帧合并在一起,我会做类似以下的事情:

merged_df = pd.merge(snp_df, gene_df, on=['chromosome', 'other_columns'])
Run Code Online (Sandbox Code Playgroud)

然而,在这种情况下 - 我需要找到染色体值与Gene数据帧中的那些匹配的SNP,并且BP值落在'chr_start'和'chr_stop'之间.这种挑战的原因是这些数据帧非常大.在此当前数据集中,snp_df具有6795021行,并且gene_df具有34362.

我试图通过分别观察染色体或基因来解决这个问题.由于未使用性染色体,因此有22种不同的染色体值(第1-22位).这两种方法都耗费了很长时间.一个使用该pandasql模块,而另一个方法是循环通过单独的基因.

SQL方法

import pandas as pd …
Run Code Online (Sandbox Code Playgroud)

python merge pandas pandasql

7
推荐指数
1
解决办法
7682
查看次数

没有聚合函数的分组

我见过这样的pandasql查询:

df = pd.DataFrame({'A': [1, 2, 2], 'B': [3, 4, 5]})
sqldf('select * from df group by A', locals())
Run Code Online (Sandbox Code Playgroud)

这给出了:

   A  B
0  1  3
1  2  6
Run Code Online (Sandbox Code Playgroud)

我觉得如果没有聚合函数就有一个组很奇怪,但是有人能告诉我在聚合列上使用了哪个函数来将多个值减少为一个吗?

python pandas pandasql

6
推荐指数
1
解决办法
7653
查看次数

熊猫根据列将两行合并为一行

我有两行看起来像这样,

------------------------------
DealName | Target | Acquirer |
-----------------------------
ABC-XYZ  | ABC    | None     |
------------------------------
ABC-XYZ  | None   | XYZ      |
------------------------------
Run Code Online (Sandbox Code Playgroud)

我希望将它们合并为一个:

------------------------------
DealName | Target | Acquirer |
-----------------------------
ABC-XYZ  | ABC    | XYZ      |
------------------------------
Run Code Online (Sandbox Code Playgroud)

不确定如何在Pandas中完成此操作。任何指针将不胜感激!提前致谢

python python-2.7 pandas pandasql pandas-groupby

6
推荐指数
1
解决办法
3427
查看次数

使用pandas将唯一数字转换为md5哈希

大家早上好.

我想将我的社会安全号码转换为md5哈希十六进制数字.结果应该是每个社会安全号码的唯一md5哈希十六进制数.

我的数据格式如下:

ob = onboard[['regions','lname','ssno']][:10]
ob

    regions lname   ssno
0    Northern Region (R1)    Banderas    123456789
1    Northern Region (R1)    Garfield    234567891
2    Northern Region (R1)    Pacino  345678912
3    Northern Region (R1)    Baldwin     456789123
4    Northern Region (R1)    Brody   567891234
5    Northern Region (R1)    Johnson     6789123456
6    Northern Region (R1)    Guinness    7890123456
7    Northern Region (R1)    Hopkins     891234567
8    Northern Region (R1)    Paul    891234567
9    Northern Region (R1)    Arkin   987654321
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下代码hashlib:

import hashlib

ob['md5'] = hashlib.md5(['ssno'])
Run Code Online (Sandbox Code Playgroud)

这给了我一个错误,它必须是一个字符串而不是列表.所以我尝试了以下方法:

ob['md5'] …
Run Code Online (Sandbox Code Playgroud)

python hashlib python-2.7 pandas pandasql

5
推荐指数
1
解决办法
4912
查看次数

查询panda df以过滤列不是Nan的行

我是 python 的新手并使用 Pandas。

我想查询一个数据框并过滤其中一列不是的行NaN

我试过了:

a=dictionarydf.label.isnull()
Run Code Online (Sandbox Code Playgroud)

但是 a 填充了trueor false。试过这个

dictionarydf.query(dictionarydf.label.isnull())
Run Code Online (Sandbox Code Playgroud)

但如我所料,出现了错误

样本数据:

      reference_word         all_matching_words  label review
0           account             fees - account    NaN      N
1           account           mobile - account    NaN      N
2           account          monthly - account    NaN      N
3    administration  delivery - administration    NaN      N
4    administration      fund - administration    NaN      N
5           advisor             fees - advisor    NaN      N
6           advisor          optimum - advisor    NaN      N
7           advisor              sub - advisor    NaN      N
8 …
Run Code Online (Sandbox Code Playgroud)

python indexing nan pandas pandasql

5
推荐指数
1
解决办法
3425
查看次数

PandaSQL 很慢

我目前正在从 R 切换到 Python(anconda/Spyder Python 3)以进行数据分析。在 RI 中使用了很多 R sqldf。由于我擅长sql查询,我不想重新学习data.table语法。使用 R sqldf,我从来没有遇到过性能问题。

现在,在 Python 中我尝试使用 pandasql 一个简单的df = "SELECT * From table LIMIT 1"将永远持续 193k 行,19 列。

我试过 pysqldf 但我收到一个错误,说该表不存在,但它确实存在。

# -*- coding: utf-8 -*-

import pandas as pd
import pandasql 
import pysqldf

#Data loading    
orders = pd.read_csv('data/orders.csv',sep = ';')

###### PANDASQL ######
test = pandasql.sqldf("SELECT  orders_id from orders LIMIT 1;",globals())
# Will last several minutes and use a lot of RAM

test = pandasql.sqldf("SELECT  orders_id from orders …
Run Code Online (Sandbox Code Playgroud)

python-3.x pandas pandasql

5
推荐指数
1
解决办法
2036
查看次数

更新表语句在 pandasql 中不起作用

我有一个包含一些空值的数据集,我想更新以读取缺失值而不是空值

我浏览了所有论坛和文档,似乎找不到回应

from pandasql import sqldf

pysqldf = lambda q: sqldf(q, globals())

Updated_table= pysqldf("update practice_names set Region = 'test'       where Region is null;")
Run Code Online (Sandbox Code Playgroud)

遗憾的是我收到了这个错误日志

--------------------------------------------------------------------------
OperationalError                          Traceback (most recent call last)
~/anaconda3/lib/python3.7/site-packages/sqlalchemy/engine/base.py in _execute_context(self, dialect, constructor, statement, parameters, *args)
   1192                         parameters,
-> 1193                         context)
   1194         except BaseException as e:

~/anaconda3/lib/python3.7/site-packages/sqlalchemy/engine/default.py in do_execute(self, cursor, statement, parameters, context)
    508     def do_execute(self, cursor, statement, parameters, context=None):
--> 509         cursor.execute(statement, parameters)
    510 

OperationalError: no such table: practice_names

The above exception was the direct cause …
Run Code Online (Sandbox Code Playgroud)

python numpy pandas pandasql

5
推荐指数
1
解决办法
2025
查看次数

在 pandas 数据帧上运行 sql 查询

我有一个数据框 df

ID 价格 地区
1 23 澳大利亚
1 45 DXB
2 25 德国大学
2 18 TUN

我想用 python 编写代码以获得以下输出

ID 价格 地区
1 45 DXB
2 25 TUN

我尝试使用 pandasql 来获取输出,但它没有给出我想要的输出

我尝试过的代码是

import pandas as pd
import pandasql as ps

#to read table
df=pd.read_excel("test.xlsx")

ps.sqldf("select ID, max(Price), Region from df order by ID")
Run Code Online (Sandbox Code Playgroud)

如果 python 本身(不使用 pandasql)有任何其他代码可以得到上述输出,请告诉我

python pandasql

5
推荐指数
1
解决办法
1万
查看次数