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 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表的字段名写入
你先把 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,第一行已作为字段名")
关键点:
df.iloc[0]提取第一行作为字段名df.iloc[1:]获取剩余数据行to_sql的if_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 分钟把入门文档给看了?

