考虑到下面的数据框架,我试图使用pandas来提取列“Total”,其中“Year”是2015-2020
Year Yield Total ... ExDate PayDate
0 2020 3.09% 0.66 ... 2020-05-12 2020-05-26
1 2020 3.09% 0.66 ... 2020-05-12 2020-05-26
2 2019 7.02% 1.5 ... 2019-11-18 2019-11-29
3 2019 7.02% 1.5 ... 2019-08-05 2019-08-20
4 2019 7.02% 1.5 ... 2019-05-17 2019-05-31
如果2020年的数据存在,我使用的代码有效:
counter = 5
for index, row in df.iterrows():
if counter == 0:
break
if row['Year'] == end + counter:
print(row['Total'])
counter -= 1
但如果2020年的数据不存在,那么它就没有输出:
Year Yield ... PayDate
0 2019 2.00% ... 2019-05-31
1 2018 7.87% ... 2018-09-28
2 2018 7.87% ... 2018-06-29
3 2017 12.27% ... 2017-09-29
4 2017 12.27% ... 2017-05-31
5 2016 4.67% ... 2016-09-30
问题:
我如何确保代码继续运行,并给出2019年至2015年的输出,2020年显示为“不可用”
预期产出(每年一个值-无重复):
0.66
1.5
.
.
.
编辑:在你发表评论后,我知道你每年只想要一个。所以固定线路:
我首先使用
drop_duplicates
删除所有重复的年份,而不是直接过滤总计列。然后根据结果,我只过滤Total列原始答复:
使用pandas时,通常只有在极少数情况下,您才需要直接使用for循环遍历数据帧。Pandas为您提供了许多在整个数据帧上执行操作的选项,而无需对其进行迭代
在本例中,您希望根据某些条件提取数据。您可以使用pandas.loc实现这一点:
loc
允许您根据条件仅选择特定数据。格式为.loc[rows, columns]
。所以对于行,我使用了一个复杂的条件来确保年份在2015年和2020年之间。对于只想筛选“总计”的列2020年是否存在并不重要。它只是过滤2015-2020年的所有行,并查看其中的“总计”列
另外,我不太理解你的代码。每次遇到所需年份的一行时,从计数器中减少1。为什么不简单地说一年内的范围呢
如果我误解了你的意图(期望的输出),请编辑你在clarift的帖子并让我知道
相关问题 更多 >
编程相关推荐