簡體   English   中英

通過使用 for 循環更改一列來創建多個數據框?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM