python - 通过使用 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"
感谢您的帮助。
解决方案
您正在使用以下行在循环的每次迭代中覆盖您的数据框:
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()
根据您的条件,可能有更好的方法来执行此操作,不需要对数据框进行临时视图,但这应该会有所帮助。
推荐阅读
- python - 在嵌入层的输出上使用 Dropout 会更改数组值,为什么?
- javascript - 设置自定义样式属性在 IE11 中不起作用
- jquery - 当没有更多的嵌套列表隐藏一个元素时
- asp.net-mvc - 我们应该将 DevExpress 添加到我们的 ASP.NET MVC 标准工具集中吗?
- java - API 最小化数据使用
- dynamics-crm - 在 CDS 上为 D365 MDA 创建一个可点击的网格调度类工具
- python - CX_Freeze EXE 在未映射的网络驱动器上不起作用
- c++ - 如何在没有`std::endl`的情况下在VS Code调试控制台中显示内容?
- javascript - 403 IAM 权限,尽管授予代理管理员权限以授予列出意图的权限
- c++ - CUDA 速度比预期慢 - 图像处理