Python 对于循环i数据帧,按行计数而不是按列计数
我有一个很大的数据框df,我正试图对它进行一些计算,当我在计算之前打印数据框df时,它是这样的:Python 对于循环i数据帧,按行计数而不是按列计数,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个很大的数据框df,我正试图对它进行一些计算,当我在计算之前打印数据框df时,它是这样的: Date High Low ... Close Volume Adj Close 0 2000-01-03 47.995617 45.515598 ... 45.880310 6471200.0 34.997250 1 2000-01-04 45.479130 43.509
Date High Low ... Close Volume Adj Close
0 2000-01-03 47.995617 45.515598 ... 45.880310 6471200.0 34.997250
1 2000-01-04 45.479130 43.509705 ... 44.147945 10440800.0 33.675823
2 2000-01-05 44.676769 42.962643 ... 42.962643 8646200.0 32.820454
3 2000-01-06 44.457947 42.452049 ... 43.837940 10990900.0 33.489136
4 2000-01-07 44.786182 43.327351 ... 44.476181 6016400.0 33.976704
... ... ... ... ... ... ... ...
5013 2019-12-05 118.430000 117.589996 ... 118.279999 3128300.0 118.279999
5014 2019-12-06 121.440002 119.910004 ... 120.610001 3287600.0 120.610001
5015 2019-12-09 121.529999 120.110001 ... 120.459999 2885200.0 120.459999
5016 2019-12-10 121.470001 120.029999 ... 120.900002 2518200.0 120.900002
5017 2019-12-11 121.379997 120.099998 ... 120.639999 1885981.0 120.639999
[5018 rows x 7 columns]
现在我想对其进行RSI计算,并将结果添加到数据帧的
def rsi_calculator(df):
last_value = float(df. loc[0, 'Adj Close'])
print(last_value)
for count, row in enumerate(df, start=1):
print(float(df. loc[count, 'Adj Close']))
它根本没有完成,但是我如何让我的循环运行5018次,这是我的行数,而不是7次,这是我的列数
34.997249603271484
33.67582321166992
32.82045364379883
33.4891357421875
33.97670364379883
34.450363159179695
34.770755767822266
34.589675903320305
试一试
至少对我来说,这种技术输出一对项(一个元组)。[1]逻辑获取元组中的第二项,即您要查找的值
祝你好运
DataFrame.\uuuu iter\uuuu
沿着“info”轴,这是数据帧的列轴。(DataFrame.\u info\u axis
)。相反,您希望使用df.iterrows()中的行作为idx的:
,尽管通常有一种避免循环的方法。如果您在浏览器中搜索“PANDAS iterate rows”,您会发现可以更好地解释这一点的引用,而我们在这里无法处理。最有可能的情况是,您将使用一个向量化表达式来实现这一点——您的代码将不会有for
循环,您只需向它提供行向量操作和通用的“do this”语句。一般来说,您需要进一步学习PANDAS教程。嗨,Jjorsal,您能详细介绍一下您希望dataframe的新列是什么吗?比如你想要每天的调整收盘价减去前一天的调整收盘价吗?从您的rsi_计算器
中,我不确定您希望新专栏超出什么范围。您希望在pandas编程中避免循环(这是一种与通用python不同的编码风格)。请用公式显示实际的RSI计算。虽然这个答案是正确的,OP和未来的读者应该避免在程序中循环。如果RSI是指相对强度指数,那么在一次调用(不是迭代调用)中有向量化(非循环)计算方法。请看:.@Parfait在效率方面是正确的。基本上总有比在数据帧上循环更快的方法。我以前做过几次,但性能并不重要,因为我永远不会有很多行数据,我只是觉得循环更直观。在处理股票数据时,如本问题中所述,性能通常非常重要,因为存在如此多的观察结果,快速获得结果至关重要。
for col,row in df.iterrows():
print((col,row["Adj Close"])[1])