首页 > 解决方案 > 通过使用 for 循环更改一列来创建多个数据框?

问题描述

我正在使用可变冷却时间计算乏燃料棒的热衰减。如何通过使用 for 循环改变冷却时间列来创建多个数据帧,然后将它们写入文件?

使用datetime对象,我通过从燃料棒排出的日期中减去未来日期来创建多列冷却时间值。

然后,我尝试使用 for 循环将这些列索引到一个新的数据帧中,目的是通过在新函数中使用新创建的数据帧来简化多个文件。

df = pd.read_excel('data')
df.columns = ['ID','Enr','Dis','Mtu']

# Discharge Dates
_0 = dt.datetime(2020,12,1)
_1 = dt.datetime(2021,6,1)
_2 = dt.datetime(2021,12,1)
_3 = dt.datetime(2022,6,1)

# Variable Cooling Time Columns
df['Ct_0[Years]'] = df['Dis'].apply(lambda x: (((_0 - x).days)/365))
df['Ct_1[Years]'] = df['Dis'].apply(lambda x: (((_1 - x).days)/365))
df['Ct_2[Years]'] = df['Dis'].apply(lambda x: (((_2 - x).days)/365))
df['Ct_3[Years]'] = df['Dis'].apply(lambda x: (((_3 - x).days)/365))

# Attempting to index columns into new data frame
for i in range(4):
    df = df[['ID','Mtu','Enr','Ct_%i[Years]'%i]]
    tfile = open('Inventory_FA_%s.prn'%i,'w')
    ### Apply conditions for flagging
    tfile.close()

我期待创建的冷却时间列被索引到新定义的 dataframedf中。相反,我收到以下错误;

KeyError: "['Ct_1[Years]'] not in index"

感谢您的帮助。

标签: pythonpandasdataframeindexing

解决方案


您正在使用以下行在循环的每次迭代中覆盖您的数据框:

df = df[['ID','Mtu','Enr','Ct_%i[Years]'%i]]

这就是为什么你在第一次迭代时很好(错误没有说明'Ct_0[Years]'不在索引中),然后在你的第二次迭代中死亡。除了在第一次迭代中选择的列之外,您已经删除了所有内容。将您的列选择到临时 df 中:

for i in range(4):
    df_temp = df[['ID','Mtu','Enr','Ct_%i[Years]'%i]]
    tfile = open('Inventory_FA_%s.prn'%i,'w')
    ### Apply conditions for flagging using df_temp
    tfile.close()

根据您的条件,可能有更好的方法来执行此操作,不需要对数据框进行临时视图,但这应该会有所帮助。


推荐阅读