如何仅浏览csv文件的特定部分?

时间:2019-07-10 19:38:15

标签: python pandas csv dataframe for-loop

我需要遍历CSV文件中的某些行,例如,从231行到252行。然后,我想将通过计算每一行得到的值相加,并除以我遍历的行数。我该怎么做?

我是熊猫的新手,所以我非常感谢您的帮助。

我有一个来自Yahoo Finance的CSV文件,看起来像这样(它有更多行):

Date,Open,High,Low,Close,Adj Close,Volume
2019-06-06,31.500000,31.990000,30.809999,31.760000,31.760000,1257700
2019-06-07,27.440001,30.000000,25.120001,29.820000,29.820000,5235700
2019-06-10,32.160000,35.099998,31.780001,32.020000,32.020000,1961500
2019-06-11,31.379999,32.820000,28.910000,29.309999,29.309999,907900
2019-06-12,29.270000,29.950001,28.900000,29.559999,29.559999,536800

我已经完成了导入熊猫的基本步骤。然后,我添加了两个与不同列对应的变量,以轻松地仅引用该列。

import pandas as pd
df = pd.read_csv(file_name)

high = df.High
low = df.Low

然后我尝试做这样的事情。我尝试在变量中使用.loc,但这似乎不起作用。这也许是超级傻瓜,但我真的是熊猫新手。

dates = df.loc[231:252, :]

for rows in dates:
        # calculations here
        # for example:
        print(high - low)
        # I would have a more complex calculation than this but 
        # but for simplicity's sake let's stick with this.

输出为每行打印出高-低的1-252,例如:

...
231    3.319997
232    3.910000
233    1.050001
234    1.850001
235    0.870001
...

但是我只希望此输出在一定数量的行上。

然后,我想将所有这些值加起来并除以我循环的行数。这部分很简单,因此您不需要在答案中包括它,但是可以。

2 个答案:

答案 0 :(得分:0)

.loc按标签切片。对于整数切片,请使用.iloc

dates = df.iloc[231:252]

答案 1 :(得分:0)

使用skiprows and nrows。通过将以1开头的范围传递给skiprows,以保持Python Pandas read_csv skip rows but keep header的标题。

In [9]: pd.read_csv("t.csv",skiprows=range(1,3),nrows=2)
Out[9]:
         Date       Open       High        Low      Close  Adj Close   Volume
0  2019-06-10  32.160000  35.099998  31.780001  32.020000  32.020000  1961500
1  2019-06-11  31.379999  32.820000  28.910000  29.309999  29.309999   907900