我试图在连接所有数据框之前根据其名称在每个数据框中添加两列。一列是年份,另一列是三个月。所以t1_15会是第三个学期和2015年。
我尝试构建一个可以一次性完成的函数,但是由于时间限制,最终只能像这样手动完成。我现在将花费更多时间返回此问题,并且真的很想解决这个问题。
frames_15 = [t1_15, t2_15, t3_15, t4_15]
for i in frames_15:
i['year'] = 2015
frames_16 = [t1_16, t2_16, t3_16, t4_16]
for i in frames_16:
i['year'] = 2016
frames_17 = [t1_17, t2_17, t3_17]
for i in frames_17:
i['year'] = 2017
frames_trim_1 = [t1_15, t1_16, t1_17]
for i in frames_trim_1:
i['trimestre'] = 1
frames_trim_2 = [t2_15, t2_16, t2_17]
for i in frames_trim_2:
i['trimestre'] = 2
frames_trim_3 = [t3_15, t3_16, t3_17]
for i in frames_trim_3:
i['trimestre'] = 3
frames_trim_4 = [t4_15, t4_16]
for i in frames_trim_4:
i['trimestre'] = 4
id像每个df一样,都有一个根据其名称组成的年份和三个月的列。
预先感谢
答案 0 :(得分:2)
最好的方法是建立一个字典,在其中注册数据帧。您已经根据他们每三个月的任务给他们起了名字。 如果您在创建时就已经知道这些信息,则甚至可以在字典中注册这些数据帧,该字典的关键字是三个月和年份的元组。
如果您的描述中有类似内容,您也可以使用globals字典,但这不是很干净,如果没有更简洁的方法,应将其视为最后选择。
如果使用像上面的变量名一样命名的键来构建字典,或者要使用globals字典的直接性,则可以按以下步骤进行操作:
import re
df_directory= dict(globals())
name_re= re.compile('^t([0-9])_([0-9]{2})$')
for name, df in df_directory.items():
matcher= name_re.match(name)
if matcher and isinstance(df, pd.DataFrame):
trimester, year= matcher.groups()
df['trimestre']= int(trimester)
df['year']= int(year) + 2000
这将处理由模式tX_XX命名且类型为DataFrame的所有变量,并解析名称中的三个月和年份,以将其分别分配给各列。