python - 将 MySQL 结果插入现有的 pandas 数据帧

标签 python mysql pandas

如果这是重复的,我们深表歉意;我在网上找不到这个问题的答案(很好)。

假设我有一个带有 name 列的 pandas 数据框。我想查询数据库并获取与每个名称关联的 id,并将该值存储在数据框中。

在本例中,我正在读取 CSV 文件(带有 name),并查询 MySQL 数据库以获取 id。我进行了一些数据清理,然后将数据帧上传到 MySQL 数据库(与我查询以获取 id 的表不同的表)。

执行此操作的最佳方法是什么?这是我想到的:

df["id"] = pd.Series(
    [pd.read_sql_query(
        f"SELECT id FROM table WHERE name LIKE '{name}'",
            connection)["id"][0] for name in df["name"]]
    )

据我了解,这可以避免在迭代时修改 df

  • 我们迭代 df["name"] 中的值
  • SQL 查询返回一个 DataFrame
  • ["id"][0] 从以下内容中提取感兴趣的值 (id) DataFrame 并将其存储在列表中
  • 此值列表将转换为 pd.Series
  • pd.Series 已添加到原始 df

这可行,但它并没有真正强制 nameid 之间建立关联,(我认为)这会更强大。 (而且,显然,上面的代码片段中没有错误处理。)

我尝试了 applymapiterrowsiteritems 的组合,但这不起作用,所以出色地。例如:

for index, name in df["name"].iteritems():
    id_df = pd.read_sql_query(f"SELECT id FROM tableWHERE name LIKE '{name}'", connection)
    temp_df[temp_df["name"] == name]["id"] = id_df["id"][0] 

警告:

SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

最佳答案

灵感来自this SO thread ,我建议将所有名称连接成一个巨大的字符串,然后将该字符串插入到单个 SQL 查询中(而不是每行单独的查询)以获得将每个名称映射到其 ID 的 DataFrame。

尝试这样的事情(现在无法测试,抱歉!):

# Build a string of comma-separated, quoted names:
# https://stackoverflow.com/q/12007686
names = '"{0}"'.format('", "'.join(df['name']))

# Get a DataFrame of names and IDs
temp = pd.read_sql_query(f"SELECT name, id FROM table WHERE name IN ({names})",
                         connection)

# Build a pandas Series that maps each name to its ID
# Could also use a python dict. Also, ".values" may not be needed here
name2id = pd.Series(index=temp['name'].values, 
                    data=temp['id'].values)

# Create the ID column in your DataFrame. There are other ways (join, etc.)
df['id'] = df['name'].map(name2id)

关于python - 将 MySQL 结果插入现有的 pandas 数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50109297/

相关文章:

python - Pandas :NaN 孔的运行长度

python - 用(0,0,255)蓝色覆盖最接近蓝色的像素

python - 如何向模型添加新列,该模型通过 django 中的外键引用其他模型

python - Pygame 图像动画循环未正确循环

MySQL Group By 和 WHERE 子句

mysql - vb.net sql查询计数

php - Redis作为MySQL写入的缓存

python - 尝试使用 .loc[row_indexer,col_indexer] = value 代替

python - 序列化 `numpy.dtype` 对象 : human readable

python - 如何计算具有多种模型/构象的蛋白质的平均结构