循环拼接DataFrame时如何保留无返回结果的空行?
解决查询无结果时空行丢失的问题
原代码中,当查询无返回结果时,convert得到的temp_df是空DataFrame,pd.concat不会将空行加入最终结果。要保留这些空行,只需在查询无结果时手动生成一行空数据,再进行拼接。
修改后的完整代码:
import numpy as np import pandas as pd from dl import authClient as ac, queryClient as qc from dl.helpers.utils import convert import openpyxl as xl wb = xl.load_workbook('/Users/somethingfile.xlsx') sheet = wb['Sheet 1'] # 定义目标列名,需和查询返回的列对应 columns = ['a', 'b', 'c', 'd', 'e'] df = pd.DataFrame([], columns=columns) for row in range(3, sheet.max_row + 1): a0, b0, r = sheet.cell(row,1).value, sheet.cell(row,2).value, 0.001 query = """ SELECT a,b,c,d,e FROM smthng WHERE q3c_radial_query(a,b,{:f},{:f},{:f}) LIMIT 1 """.format(a0,b0,r) response = qc.query(sql=query,format='csv') temp_df = convert(response,'pandas') # 若查询结果为空,生成一行填充NaN的空数据 if temp_df.empty: temp_df = pd.DataFrame([[np.nan]*len(columns)], columns=columns) df = pd.concat([df,temp_df], ignore_index=True) df.to_csv('output.csv', index=False)
关键修改说明:
- 明确列名列表
columns,确保空行的列结构和查询结果完全一致 - 添加空结果判断:当查询无返回时,手动创建一行带NaN值的DataFrame
- 拼接时启用
ignore_index=True,避免循环中出现索引重复问题 - 导出CSV时添加
index=False,去除不必要的自动索引列
处理后,Excel中每一行对应的查询都会在最终CSV里保留一行数据,无结果时显示为空(NaN值)。
内容的提问来源于stack exchange,提问作者James Lane
相关产品推荐
相关产品推荐

