如何将DataFrame列表的元素名称添加为对应DataFrame的列?
给列表中的每个DataFrame添加对应标签列
当然可以做到!不过有个小细节要注意:Python的列表本身不会记住元素原来的变量名,所以你得把每个DataFrame对应的标签信息和它绑定起来——这里有两种实用的方案,看哪种更适合你的情况:
方案1:用字典存储DataFrame(推荐)
如果还没把DataFrame放进列表,强烈建议先把它们存在字典里,用你想要保留的关键信息当字典的键(比如原来的变量名里的标识):
import pandas as pd # 举个示例,假设你有两个带地域标识的DataFrame df_ny = pd.DataFrame({"sales": [100, 200, 300]}) df_london = pd.DataFrame({"sales": [150, 250, 350]}) # 用字典把标签和DataFrame绑定起来 df_dict = {"ny": df_ny, "london": df_london} # 给每个DataFrame添加标签列,之后转成列表(如果需要的话) labeled_dfs = [] for label, df in df_dict.items(): # 先复制一份,避免不小心修改原DataFrame df_with_label = df.copy() # 添加标签列,列名可以自己改,比如叫"region"或者"source" df_with_label["source_label"] = label labeled_dfs.append(df_with_label) # 之后合并就很方便了 combined_df = pd.concat(labeled_dfs)
方案2:已有DataFrame列表?搭配标签列表就行
如果你已经把DataFrame都放进列表了,那只要准备一个和列表长度完全匹配的标签列表,保证顺序一一对应就行:
import pandas as pd # 假设这是你已有的DataFrame列表 my_list = [df_ny, df_london] # 对应的标签列表,顺序必须和my_list里的DataFrame一致 labels = ["ny", "london"] # 遍历给每个DataFrame加标签列 labeled_dfs = [] for df, label in zip(my_list, labels): df_with_label = df.copy() df_with_label["source_label"] = label labeled_dfs.append(df_with_label) # 合并所有带标签的DataFrame combined_df = pd.concat(labeled_dfs)
小提醒:为啥不能直接从列表里拿元素名称?
Python里的变量名只是指向DataFrame对象的“指针”而已,列表里存的是对象本身,根本不知道它原来叫什么名字。所以必须手动提供标签信息——不管是通过字典的键,还是单独的标签列表,都得明确对应上。
如果你的标签是从文件名、数据库表名这类来源来的,只要把这些来源信息整理成标签列表,再和DataFrame列表配对处理就好啦。
内容的提问来源于stack exchange,提问作者Nazer
相关产品推荐
相关产品推荐

