[英]Create mutliple dataframes by changing one column with a for loop?
我正在計算使用可變冷卻時間的乏燃料棒的熱衰減。 如何通過使用 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"
感謝您的幫助。
您正在使用以下行在循環的每次迭代中覆蓋您的數據框:
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()
根據您的條件,可能有更好的方法來做到這一點,不需要臨時查看數據框,但這應該會有所幫助。
你為什么要創建一個新的數據框? 是否只是為了重新組織/刪除列?.Engineero 是正確的,您在每次迭代時都有效地重寫了 df。
無論如何你可以嘗試:
dfnew = pd.Dataframe()
dfnew = df[['ID','Mtu','Enr']]
for i in range(4):
dftemp = df[['Ct_%i[Years]'%i]]
dfnew.join(dftemp)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.