如何从字符串列表创建DataFrame并合并为单个(不使用字典)
动态创建品牌命名DataFrame并合并的解决方案
嘿,我来帮你搞定这个问题!你直接写 "df_" + i = pd.read_csv(...) 是没法运行的,Python不允许用这种字符串拼接的方式直接给变量赋值。不过我们可以通过操作全局命名空间来实现动态创建变量,之后再把这些DataFrame合并成一个,完全不用字典也能做到。
1. 动态生成对应品牌的DataFrame变量
我们可以用globals()函数来访问全局变量的字典,这样就能把每个品牌对应的DataFrame以df_brand1、df_brand2的形式创建出来,同时还能把这些DataFrame存到一个列表里,方便后续合并:
import pandas as pd list1 = ['brand1','brand2'] # 初始化一个列表,用来存所有创建好的DataFrame dfs_collection = [] for brand in list1: # 拼接出目标变量名 target_df_name = f"df_{brand}" # 读取CSV并赋值给动态生成的变量 globals()[target_df_name] = pd.read_csv(f'filepath{brand}.csv') # 这里假设你的CSV路径是filepath+品牌名,比如filepathbrand1.csv # 把刚创建的DataFrame加入列表,为合并做准备 dfs_collection.append(globals()[target_df_name])
执行这段代码后,你就能在全局环境里找到df_brand1和df_brand2这两个独立的DataFrame了,同时dfs_collection列表里也存着这两个对象的引用。
2. 合并所有DataFrame为单个
有了存着所有DataFrame的列表,直接用pandas.concat()就能轻松合并成一个大的DataFrame:
final_merged_df = pd.concat(dfs_collection, ignore_index=True)
如果每个品牌的DataFrame列结构一致,concat会直接按列对齐合并;如果列结构有差异,它会自动给缺失的列填充NaN,保证数据完整性。
额外优化:保留品牌标识
要是你想在合并后的DataFrame里知道每一行属于哪个品牌,可以在创建单个DataFrame的时候添加一列品牌标记:
import pandas as pd list1 = ['brand1','brand2'] dfs_collection = [] for brand in list1: target_df_name = f"df_{brand}" temp_df = pd.read_csv(f'filepath{brand}.csv') # 添加品牌列,标记当前数据所属品牌 temp_df['brand_source'] = brand globals()[target_df_name] = temp_df dfs_collection.append(temp_df) final_merged_df = pd.concat(dfs_collection, ignore_index=True)
这样合并后的final_merged_df里每一行都带着brand_source列,能清晰看到数据来源,后续分析起来更方便。
内容的提问来源于stack exchange,提问作者Aayush Tomar
相关产品推荐
相关产品推荐

