我有一个包含两列的 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
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 行;节省资源。