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

Python中用for循环无法获取DataFrame名称,无法批量上传至ADLS Gen2

问题:批量上传DataFrame到ADLS Gen2时无法获取DataFrame名称

我需要将两个DataFrame(test1、test2)上传至ADLS Gen2目录,但无法获取DataFrame的变量名。此前单个上传时,我会直接调用以下upload_df_to_adls_path函数:

upload_df_to_adls_path(
    df,
    adls_dirname=staging_dirname,
    adls_filename=staging_filename,
    container_name=staging_container_name,
    storage_account_name=staging_account_name,
    storage_account_key=staging_account_key,
)

def upload_df_to_adls_path(
   df: pd.DataFrame, 
   adls_dirname: str,
   adls_filename: str,
   container_name: str,
   storage_account_name: str, 
   storage_account_key: str,
 ):
    """将pandas DataFrame以JSON Lines文件格式上传至指定ADLS路径"""
    json_data = df.to_json(orient='records', lines=True, date_format='iso')

    adls_service_client = get_adls_client(storage_account_name, storage_account_key)
    file_system_client = adls_service_client.get_file_system_client(file_system=container_name)

    try:
        file_system_client.create_directory(adls_dirname)
    except Exception as e:
        print(e)

    try:
        directory_client = file_system_client.get_directory_client(adls_dirname)
        file_client = directory_client.get_file_client(adls_filename)
        file_client.upload_data(json_data, overwrite=True)
    except Exception as e:
        print(e)

尝试用for循环批量处理时,我试图获取DataFrame的name属性,触发了报错:

final_df = [test1, test2]       
for files in final_df:
    print(files.name)
#     upload_df_to_adls_path(files, adls_dirname="FinalFilesToUse", adls_filename=files,
#         container_name=staging_container_name,
#         storage_account_name=staging_account_name,
#         storage_account_key=staging_account_key)       

# 报错信息:
# AttributeError: 'DataFrame' object has no attribute 'name'

解决办法:用字典关联DataFrame与目标文件名

Pandas DataFrame对象本身没有name属性,无法直接获取其变量名。可以通过字典来存储每个DataFrame对应的目标文件名,循环时同时获取DataFrame和文件名:

# 构建字典:键为ADLS上要保存的文件名,值为对应的DataFrame
df_mapping = {
    "test1.jsonl": test1,
    "test2.jsonl": test2
}

# 遍历字典完成批量上传
for target_filename, df in df_mapping.items():
    upload_df_to_adls_path(
        df,
        adls_dirname="FinalFilesToUse",
        adls_filename=target_filename,
        container_name=staging_container_name,
        storage_account_name=staging_account_name,
        storage_account_key=staging_account_key
    )

补充说明

  • 字典的键可以直接设置为你需要在ADLS中保存的完整文件名(建议加上.jsonl后缀,匹配函数中生成的JSON Lines格式)
  • 如果需要以变量名作为文件名基础,只需将键设为"test1",再拼接后缀即可(比如f"{key}.jsonl")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 14:47:13