有没有办法从 pandas 数据帧向 SQL 表添加功能/列?

问题描述 投票:0回答:1

我有一个包含两列的 pandas 数据框:PaymentID 和 WasDenied。我想通过合并 PaymentID 列将该 WasDenied 列添加到我的 SQL 表“Payments”中。有什么办法可以做到吗?

我熟悉 pandas

.to_sql()
但我不认为
if_exists
参数中的替换或追加选项会有帮助,因为我不希望追加或替换,我希望合并/加入,尽管我可能是错的。我正在使用 SQLite 和 MS SQL,因此如果答案因数据库而异,请告诉我。

SQL 中的付款表:

付款ID 付款方式 付款金额
123 信用卡 $100.00
456 现金 25.50 美元
456 现金 25.50 美元
789 银行转账 500.75 美元
101 借记卡 32.14 美元
101 借记卡 35.20 美元

Pandas 中的 WasDenied 表:

付款ID 被拒绝
123 正确
456 错误
789 错误
101 正确

我希望看到的更新后的付款表:

付款ID 付款方式 付款金额 被否认
123 信用卡 $100.00 正确
456 现金 25.50 美元 错误
456 现金 25.50 美元 错误
789 银行转账 500.75 美元 错误
101 借记卡 32.14 美元 正确
101 借记卡 35.20 美元 正确
df = pd.DataFrame([[123, True],[456, False], [789, False], [101, True]], columns=['PaymentID', 'WasDenial'])
df
python sql pandas merge
1个回答
0
投票

SQLite 没有布尔数据类型。相反,TRUE 和 FALSE 是 1 和 0 的同义词。

因此,将列添加为整数,默认为 0,然后从另一个表更新其值。

ALTER TABLE payment
   ADD COLUMN WasDenial INT
   DEFAULT 0
;

UPDATE payment
   SET WasDenial = 1
   WHERE EXISTS (
      SELECT *
        FROM xxx
       WHERE xxx.PaymentID = payment.PaymentID
         AND xxx.wasDenial = 1
   )
;

创建表

xxx
(从数据帧)时,我建议仅过滤 TRUE 行。这样就不需要 WasDenial 列或 FALSE 行;节省资源。

© www.soinside.com 2019 - 2024. All rights reserved.