温馨提示:本文翻译自stackoverflow.com,查看原文请点击:python - Create mutliple dataframes by changing one column with a for loop?
dataframe pandas python indexing

python - 通过使用for循环更改一列来创建多数据帧?

发布于 2020-03-27 11:12:31

我正在使用可变的冷却时间来计算乏燃料棒的热衰减。如何通过使用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()

我期望将创建的冷却时间列索引到新定义的数据框中df相反,我收到以下错误;

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

感谢您的帮助。

查看更多

查看更多

提问者
StupidPanda
被浏览
77
Engineero 2019-07-03 22:45

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

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()

根据您的条件,可能有更好的方法来执行此操作,而无需临时查看数据框,但这应该会有所帮助。