【问题标题】:Pandas merge only new data in SQLite databasePandas 只合并 SQLite 数据库中的新数据
【发布时间】:2020-04-13 17:02:54
【问题描述】:

我是 SQL 的绝对新手,刚刚开始使用它。我有一个包含股票价格及其日期的 SQLite 数据库。

然后,我使用 API 读取最新的股票价格,并希望更新我的数据库并仅添加具有新日期的新价格。但我想将旧的保留在数据库中。我从 API 中获取它们作为 pandas 数据框。我的 API 返回重复项,我不想在我的数据库中有重复项。

我使用 Python 3.6 和 sqlite3 作为引擎。

这是数据中的一组数据示例:

                     1. open  2. high  3. low  4. close  5. volume
date                                                              
2020-04-09 16:00:00  571.925   573.01  571.73    573.01   117287.0
2020-04-09 15:59:00  572.000   572.00  571.45    572.00    56954.0
2020-04-09 15:58:00  571.450   572.00  571.28    571.90    63987.0
2020-04-09 15:57:00  571.560   572.00  571.26    571.42    50978.0
2020-04-09 15:56:00  570.990   571.61  570.58    571.49    30975.0

我厌倦了https://www.ryanbaumann.com/blog/2016/4/30/python-pandas-tosql-only-insert-new-rows 提出的解决方案。但我得到一个错误:

KeyError: Index(['date'], dtype='object')

使用的代码是:

df_new=clean_df_db_dups(data, tablename, conn, ['date'])
print('New:',df_new.head())

任何帮助都会很好。这只是我的第二篇 Stackoverflow 帖子,所以如果我在做某事不对,请告诉我;)。

【问题讨论】:

    标签: python sql pandas sqlite dataframe


    【解决方案1】:

    你可以使用pd.to_sql,它有一个名为if_exists的参数,如果数据库中已经存在表,你可以使用if_exists="append",如果你已经有了表,它只会追加熊猫数据框架。

    【讨论】:

    • 是的,基本上这可以工作,但我的 API 中有重复项,必须将它们过滤掉。
    • 如果您的意思是这样,您可以使用 pandas drop_duplicates 删除数据框中的重复项。但是,如果您想要数据框中的唯一值,我建议您阅读以下内容:ryanbaumann.com/blog/2016/4/30/…
    • 好的,谢谢,但是有没有直接使用 sqlite3 模块的可能解决方案?
    • 我个人不知道,对不起!
    • 好的,没问题。我尝试了解决方案,但出现错误(在已编辑的问题中)
    猜你喜欢
    • 2016-10-08
    • 2017-06-27
    • 1970-01-01
    • 2015-03-05
    • 2015-12-13
    • 2014-04-18
    • 1970-01-01
    • 2020-06-28
    • 2015-04-17
    相关资源
    最近更新 更多