Python过滤DataFrame时空DataFrame与结果行共存,如何解决?
移除DataFrame过滤输出中的空DataFrame内容
问题场景
执行DataFrame过滤操作后,输出同时包含空DataFrame信息和符合条件的行,示例代码:
df1 = df.loc[df['ID'] == '2f45b-ii58-4927'] print(df1)
输出示例:
Empty DataFrame Columns: [] Date sal ID 0 14Jun 10100 2f45b-ii58-4927
该代码运行在Azure函数中,功能为递归读取Azure存储的JSON文件转DataFrame并过滤。当筛选行不来自首个读取的文件时,会输出空DataFrame的冗余信息,需要仅保留有效筛选结果。
完整代码如下:
from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient import json import pandas as pd from pandas import DataFrame from datetime import datetime import uuid filename = "raw/filename.json" container_name="test" constr = "" blob_service_client = BlobServiceClient.from_connection_string(constr) container_client = blob_service_client.get_container_client(container_name) blob_client = container_client.get_blob_client(filename) streamdownloader = blob_client.download_blob() fileReader = json.loads(streamdownloader.readall()) df = pd.DataFrame(fileReader) df1= df[df['ID'] == '2f45b-ii58-4927'] df1.head()
解决方案
1. 单文件过滤:仅输出非空结果
利用DataFrame的empty属性判断是否有有效数据,仅在非空时输出:
df1= df[df['ID'] == '2f45b-ii58-4927'] # 仅当筛选结果非空时打印/返回 if not df1.empty: print(df1) # Azure函数中可按需返回结果,例如转为JSON # return df1.to_json(orient='records')
2. 多文件递归场景:合并结果后统一输出
针对递归读取多个文件的场景,先收集所有符合条件的行到统一DataFrame,最后再输出,避免中间空结果:
# 初始化空DataFrame存储所有有效结果 result_df = pd.DataFrame(columns=['Date', 'sal', 'ID']) # 递归读取文件的循环逻辑(示例) for filename in your_file_list: blob_client = container_client.get_blob_client(filename) streamdownloader = blob_client.download_blob() fileReader = json.loads(streamdownloader.readall()) df = pd.DataFrame(fileReader) filtered_df = df[df['ID'] == '2f45b-ii58-4927'] # 仅合并非空结果 if not filtered_df.empty: result_df = pd.concat([result_df, filtered_df], ignore_index=True) # 最终输出所有有效筛选行 print(result_df)
这两种方式都能彻底移除空DataFrame的冗余输出,只保留符合条件的行数据。
内容的提问来源于stack exchange,提问作者SanjanaSanju
相关产品推荐
相关产品推荐

