You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将SQL表导入DataFrame时字符串列显示NAN的问题求助

问题分析与解决方案

看起来你遇到的核心问题是指定的DataFrame列名和SQL表实际列名不匹配,导致包括字符串列在内的多列都显示NaN。咱们一步步排查和解决:


1. 最可能的原因:列名不匹配(大小写/空格/拼写)

你在构造DataFrame时指定的columns参数,必须和SQL表中的列名完全一致(包括大小写、空格、拼写):

  • 比如代码里的'Last_name '后面多了个空格,如果SQL表中列名是Last_name(无空格),这列就会全是NaN
  • 很多数据库(比如Linux环境下的MySQL)对列名大小写敏感,若表中列是first_name小写,你写First_name大写也会匹配失败

快速验证方法

先打印pd.read_sql_query返回的原始DataFrame的列名,确认实际列名:

query = pd.read_sql_query('SELECT * FROM ' + table , db)
print("SQL表实际列名:", query.columns.tolist())

修正方式

要么严格按照实际列名修改columns参数,要么干脆不指定columns,直接使用查询返回的结果:

# 不需要再用DataFrame包装,read_sql_query本身就返回DataFrame
df = query
print(df)

2. 其他排查方向

检查数据库是否真的返回了数据

可以通过cursor直接执行查询,验证数据是否存在:

cursor.execute('SELECT * FROM ' + table + ' LIMIT 3')  # 只查前3行
rows = cursor.fetchall()
print("数据库直接返回的数据:", rows)

如果这里也没有数据,那要确认数据库名、表名是否正确,或者表本身是否为空。

修正后的完整代码示例

去掉多余的步骤,增加数据验证环节:

import pymysql
import pandas as pd

storage = input("Enter your database name :")
table = input("Enter your table name: ")
# 记得填写你的数据库用户名和密码
db = pymysql.connect(host='localhost', database=storage, user='your_username', passwd='your_password')

cursor = db.cursor()
print("Connected to " + storage)

# 先验证数据库是否有数据
cursor.execute(f'SELECT * FROM {table} LIMIT 5')
print("数据库返回的前5条原始数据:", cursor.fetchall())

# 读取数据到DataFrame
df = pd.read_sql_query(f'SELECT * FROM {table}', db)
print("\nDataFrame列名:", df.columns.tolist())
print("\n完整DataFrame内容:")
print(df)

# 记得关闭数据库连接
db.close()

内容的提问来源于stack exchange,提问作者Venkat Kishore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:49:27