Python中如何将pandas DataFrame的第一行内容作为MySQL表的字段名写入

<br> PageDF = PageDF.append(pd.read_html(readStr)[4], ignore_index=True)<br> print(PageDF)<br> engine = create_engine('mysql+pymysql://root:<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2e5c41415a6e1f171c001f1816001617001a18">[email&nbsp;protected]</a>:3306/test?charset=utf8')<br> PageDF.to_sql(Testtable,engine,index=False)<br>

Print(PageDF)

<br> 0 1 2 3<br>0 序号 物品名称 重量 柜号<br>1 1 西瓜 20 14<br>2 2 芝麻 20 11<br>3 3 玉米 20 11<br>4 4 茄子 20 9<br>

Navicat 看到 Testtable 是这样的:
<br>+------+-------+------------+------+------+<br>|0 | 0 | 1 | 2 | 3 |<br>+------+-------+------------+------+------+<br>|0 | 序号 | 物品名称 | 重量 | 柜号 |<br>|1 | 1 | 西瓜 | 20 | 14 |<br>|2 | 2 | 芝麻 | 20 | 11 |<br>|3 | 3 | 玉米 | 20 | 11 |<br>|4 | 4 | 茄子 | 20 | 9 |<br>

但我想写进去的时候是这样子的,看了 to_sql 的英文文档,试了 index_lable=0 那些参数,始终弄不成下面这个样子的写入状态:

<br>+------+-------+------------+------+------+<br>|0 | 序号 | 物品名称 | 重量 | 柜号 |<br>+------+-------+------------+------+------+<br>|1 | 1 | 西瓜 | 20 | 14 |<br>|2 | 2 | 芝麻 | 20 | 11 |<br>|3 | 3 | 玉米 | 20 | 11 |<br>|4 | 4 | 茄子 | 20 | 9 |<br>

请问正确的 to_sql 写入方式应该是怎么做的?

感谢各位热心解答~~~
Python中如何将pandas DataFrame的第一行内容作为MySQL表的字段名写入


4 回复

你先把 pageDF 的 columns 整对了
给 read_Html 加参数
或者你手动 assign columns


这个需求很常见,可以直接用pandas的to_sql方法配合if_exists='replace'参数来实现。

import pandas as pd
from sqlalchemy import create_engine

# 示例数据 - 假设你的DataFrame第一行是字段名
df = pd.DataFrame([
    ['name', 'age', 'city'],      # 第一行:字段名
    ['Alice', 25, 'Beijing'],
    ['Bob', 30, 'Shanghai'],
    ['Charlie', 35, 'Guangzhou']
])

# 提取第一行作为列名
new_columns = df.iloc[0].tolist()
# 从第二行开始作为数据
data = df.iloc[1:].reset_index(drop=True)
# 重命名列
data.columns = new_columns

# 创建数据库连接
engine = create_engine('mysql+pymysql://username:password@localhost:3306/database_name')

# 写入MySQL表,使用'replace'模式会先删除表再创建
data.to_sql('table_name', con=engine, if_exists='replace', index=False)

print("DataFrame已成功写入MySQL,第一行已作为字段名")

关键点:

  1. df.iloc[0] 提取第一行作为字段名
  2. df.iloc[1:] 获取剩余数据行
  3. to_sqlif_exists='replace'参数确保表结构按DataFrame的列名创建

如果第一行已经是字段名但DataFrame没识别,直接to_sql就行。

感谢感谢,看来是没有自带方法这么做,发帖前也查过文档,这里高手多,是想试着问问也许有妖招吧。。。^_^
现在老老实实组装 MySQL 语句 ing…

#2 怎么就没有了?

> 给 read_Html 加参数
<br>header : int or list-like or None, optional<br>The row (or list of rows for a MultiIndex) to use to make the columns headers.<br>

> 或者你手动 assign columns
<br>pageDF.columns = pageDF.iloc[0]<br>

难道我要喂你嘴里你才会吃吗?你能不能花 30 分钟把入门文档给看了?

回到顶部