【问题标题】:How to append to an existing SQL table with pandas如何使用 pandas 追加到现有的 SQL 表
【发布时间】:2021-03-14 05:02:39
【问题描述】:

我有一个包含 8 列的现有 SQL 表。现在我也有一个 2 列的 DataFrame。这 2 列与现有 SQL 表的前 2 列具有相同的名称。我试图将我的 df 附加到现有的 SQL 表中。因此,对于前 2 列,我需要它来附加我的 df 的数据,而对于最后 6 列,我需要它来写入 None 或 NaN 或 0。

这是我的代码:

from sqlalchemy import create_engine
import pandas as pd
import numpy as np

df_2_columns = pd.DataFrame(np.column_stack([ls_meet_id]), 
                                columns=['ID', 'Value'])
                                                    
engine = create_engine("mysql+pymysql://{user}:{pw}@localhost/{db}"
                        .format(user="root",
                                pw="*****.",
                                db="*****"))
# insert into table
df_2_columns.to_sql(my_table, con = engine, if_exists = 'append', chunksize = 1000)

当我在上面运行时,我收到以下错误:

ValueError: Empty data passed with indices specified.

我确定这与我的 df 仅包含 2 列数据而我的 eisting sql 表包含 8 列数据这一事实有关...如何解决?

【问题讨论】:

  • 即兴发挥,我认为您应该尝试使用 sqlalchemy 来更新特定的列。
  • @sammywemmy 喜欢你的意思吗?可以用代码显示吗?为什么这比附加更好?

标签: python mysql pandas dataframe sqlalchemy


【解决方案1】:

您也可以使用 pandas.merge 函数,以防两个表之间有公共字段,例如 ID 字段或另一个公共字段。

这样的话

margedDF = df_2_columns.merge({sql_df}, on={common_field}, how=outer)

{sql_df} (或将其转换为数据框后称为您的 sql 表的任何名称) {common_field}(两个数据帧之间的公共字段)

这将产生一个新的数据框,其中包含 sql 表和 pandas 数据框中的列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-02
    • 2019-01-03
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多