Python3.6下检测Pandas DataFrame的Code列空值并处理及MySQL入库
Pandas检测Code列空值并处理的实现方案
1. 正确检测Code列的Null/NaN值
你之前使用的isnull().value.any()写法有误,正确的检测逻辑应该针对Code列单独判断:
import pandas as pd # 假设你的DataFrame为df has_nan = df['Code'].isnull().any()
说明:df['Code'].isnull()会返回对应列的布尔值Series,any()方法只要检测到一个True(即存在空值)就会返回True,能准确判断Code列是否存在空值。
另外注意:你提供的示例数据中,空值是字符串形式的NaN.,需要先做清洗转换为真正的NaN,否则isnull()无法识别:
# 清洗Code列:去掉末尾的小数点,转换为数值类型,无法转换的转为NaN df['Code'] = pd.to_numeric(df['Code'].str.strip('.'), errors='coerce')
2. 空值行写入CSV日志
如果检测到空值,筛选出对应行并写入CSV文件:
if has_nan: # 筛选Code列为空的行 nan_rows = df[df['Code'].isnull()] # 写入CSV日志,index=False避免写入无关的索引列 nan_rows.to_csv('nan_error_log.csv', index=False)
3. 无空值时导入MySQL数据库
若检测无空值,打印验证提示并将数据导入MySQL,需要借助sqlalchemy实现连接:
else: print('validation successful') # 导入所需库(需提前安装sqlalchemy和pymysql) from sqlalchemy import create_engine # 构建数据库连接字符串,替换为你的实际信息 engine = create_engine('mysql+pymysql://用户名:密码@主机地址:端口/数据库名') # 将DataFrame写入数据库表,if_exists参数可选'replace'/'append'/'fail' df.to_sql('目标表名', engine, if_exists='append', index=False)
完整可运行代码示例
import pandas as pd from sqlalchemy import create_engine # 模拟你提供的原始DataFrame raw_data = { 'Code': ['23.', '34.', 'NaN.', '56.', '67.'], 'region': ['AA.', 'BB.', 'Cc.', 'BB.', '45.'], 'role': ['B.', 'C.', 'A.', 'C.', 'C.'], 'type': ['Y', 'X', 'Z', 'Y', 'Y.'] } df = pd.DataFrame(raw_data) # 预处理Code列,转换为数值类型并清洗异常值 df['Code'] = pd.to_numeric(df['Code'].str.strip('.'), errors='coerce') # 检测空值 has_nan = df['Code'].isnull().any() if has_nan: nan_rows = df[df['Code'].isnull()] nan_rows.to_csv('nan_error_log.csv', index=False) print('空值行已写入nan_error_log.csv') else: print('validation successful') # 替换为你的数据库连接信息 engine = create_engine('mysql+pymysql://root:123456@localhost:3306/test_db') df.to_sql('data_table', engine, if_exists='append', index=False) print('数据已成功导入MySQL')
内容的提问来源于stack exchange,提问作者LearnerCoder
相关产品推荐
相关产品推荐

