如何为列表中的每个numpy.ndarray分别创建独立DataFrame
实现思路
强烈不推荐用动态生成独立变量名的方式管理多个DataFrame,后续检索、遍历、批量处理的成本极高,你提到的字典存储方案是当前场景的最优解,从根源上避免循环覆盖变量的问题。
前置修正
你给出的输入列表示例不符合Python语法,数组元素之间需要用逗号分隔,同时注意不要用list作为变量名,会覆盖Python内置的列表类型,导致后续调用内置方法报错。正确的输入写法:
import pandas as pd arr_list = [ [1, 2, 3, 4], [12, 19, 30, 60, 95, 102] ]
批量生成DataFrame
遍历存储数组的列表,按照你需要的命名规则生成字典键,对应的值就是转换完成的单列DataFrame:
df_container = {} # start=1 对应命名里的序号从1开始计数 for arr_index, arr_content in enumerate(arr_list, start=1): df_name = f"Array{arr_index}_df" # 生成单列DataFrame,列名和DataFrame命名保持一致 df_container[df_name] = pd.DataFrame(arr_content, columns=[df_name]) # 如果需要索引从1开始(和你给出的示例效果匹配),加上下面这行 df_container[df_name].index += 1
调用指定DataFrame
需要使用对应数组的DataFrame时,直接通过键名从字典中取出即可,例如取第二个数组生成的DataFrame:
array2_df = df_container["Array2_df"] print(array2_df.head(4))
输出效果和你的预期完全一致:
Array2_df 1 12 2 19 3 30 4 60
注:如果你一定要生成独立命名的全局变量(极度不推荐,仅做原理说明),可以通过
globals()实现,但这种方式会让变量管理变得混乱,极易出现命名冲突:for arr_index, arr_content in enumerate(arr_list, start=1): df_name = f"Array{arr_index}_df" globals()[df_name] = pd.DataFrame(arr_content, columns=[df_name]) globals()[df_name].index += 1 # 执行完成后可以直接通过Array1_df、Array2_df访问对应DataFrame
内容的提问来源于stack exchange,提问作者Sarah Phillips
相关产品推荐
相关产品推荐

