Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x PYTHON在iloc[]代码中使用Dataframe SENSEI Dataframe奇怪的索引器,用于将行从一个数据帧复制到另一个数据帧_Python 3.x_Pandas_Index Error - Fatal编程技术网

Python 3.x PYTHON在iloc[]代码中使用Dataframe SENSEI Dataframe奇怪的索引器,用于将行从一个数据帧复制到另一个数据帧

Python 3.x PYTHON在iloc[]代码中使用Dataframe SENSEI Dataframe奇怪的索引器,用于将行从一个数据帧复制到另一个数据帧,python-3.x,pandas,index-error,Python 3.x,Pandas,Index Error,在Windows 10上基于Anaconda3的Spyder上使用Python 3.5,使用2个GPU机器: 我正在使用日本空手道大师数据集检查在过去5年中获得硕士学位的大师,并将其所有行复制到另一个Pandas Dataframe sensei5yrs进行进一步处理: 我需要将一行一行从一个熊猫数据帧“sensei”复制到另一个熊猫数据帧sensei5yrs我正在使用以下代码,但失败了: for i in range(0, len(sensei)-1): #print(sensei.i

在Windows 10上基于Anaconda3的Spyder上使用Python 3.5,使用2个GPU机器:

我正在使用日本空手道大师数据集检查在过去5年中获得硕士学位的大师,并将其所有行复制到另一个Pandas Dataframe sensei5yrs进行进一步处理:

我需要将一行一行从一个熊猫数据帧“sensei”复制到另一个熊猫数据帧sensei5yrs我正在使用以下代码,但失败了:

for i in range(0, len(sensei)-1):
    #print(sensei.iloc[i]['Year'], sensei.iloc[i]['Date']
    chk=sensei.iloc[i]['Year']
    print("Checker: ",chk, sensei)
    if str(chk) in ['2017','2016','2015','2014','2013']:
        print("Found one year")
        sensei5yrs.iloc[i]=sensei.iloc[i]
错误出现在上述代码的最后一行:

IndexError: single positional indexer is out-of-bounds

print(sensei5yrs)
Empty DataFrame
Columns: [Date, OpenScore, HighScore, LowScore, CloseScore, Adj CloseScore, 
VolumeFights, Year]
sensei pandas数据框具有以下结构和数据:

print(sensei)
Columns: [Date, OpenScore, HighScore, LowScore, CloseScore, Adj CloseScore,VolumeFights, Year]
0 2000-11-23  3837.110107  3871.340088  3826.419922  3852.399902  3852.399902   12800  2000
1 2017-11-24  3860.520020  3889.560059  3856.580078  3868.340088  3868.340088    12800  2017   
例如,“年”列中的For循环遇到2017时的错误如下:

IndexError: single positional indexer is out-of-bounds
PS:上面的代码运行良好,直到遇到一行年份==['2017'、'2016'、'2015'、'2014'、'2013'],在“年”列中遇到任何上述年份时,它立即抛出上述索引器


向所有试图解决这个难题的人表示衷心的感谢。

没有必要通过迭代每一行来实现这一点。只需在原始数据帧上使用布尔索引即可创建新的Sense5对象,如下所示:

import pandas as pd
year = ['2017','2010','2015','2014','2013', '2013','2011','2012','2014','2010']
master = ['foo', 'bar', 'foo1', 'bar1', 'foo2', 'bar2', 'foo3', 'bar3', 'foo4', 'bar4']

sensei = pd.DataFrame({'year' : year, 'master' : master})
sensei5 = sensei[2017 - sensei['year'].astype(int) <=5]
Columns = ["Date", "OpenScore", "HighScore", "LowScore", "CloseScore", "Adj CloseScore", "VolumeFights", "Year"]
a = [2000-11-23, 3837.110107,  3871.340088, 3826.419922,  3852.399902,  3852.399902 ,  12800 , "2000"]
b = [2017-11-24, 3860.520020,  3889.560059, 3856.580078,  3868.340088,  3868.340088 ,   12800, "2017"]

df = pd.DataFrame([a, b], columns = Columns)
df5 = df[2017 - df['Year'].astype(int) <=5]
然而,如果您必须使用loc进行迭代,那么下面的方法似乎可以很好地工作。您可能会遇到问题,因为您正在从数据帧的长度中减去1。我怀疑您不打算这样做,因为python范围在停止条件之前停止一个:

newSensei5 = pd.DataFrame(columns = sensei.columns)
for row in range(len(sensei)):
    if int(sensei.loc[row, 'year']) >=2012:
        newSensei5.loc[row, :] = sensei.loc[row, :]
其中:

  master  year
0    foo  2017
2   foo1  2015
3   bar1  2014
4   foo2  2013
5   bar2  2013
7   bar3  2012
8   foo4  2014
In [23]: newSensei5
Out[23]:
  master  year
0    foo  2017
2   foo1  2015
3   bar1  2014
4   foo2  2013
5   bar2  2013
7   bar3  2012
8   foo4  2014
编辑我没有注意到您也传递了数据。我将其重新创建如下:

import pandas as pd
year = ['2017','2010','2015','2014','2013', '2013','2011','2012','2014','2010']
master = ['foo', 'bar', 'foo1', 'bar1', 'foo2', 'bar2', 'foo3', 'bar3', 'foo4', 'bar4']

sensei = pd.DataFrame({'year' : year, 'master' : master})
sensei5 = sensei[2017 - sensei['year'].astype(int) <=5]
Columns = ["Date", "OpenScore", "HighScore", "LowScore", "CloseScore", "Adj CloseScore", "VolumeFights", "Year"]
a = [2000-11-23, 3837.110107,  3871.340088, 3826.419922,  3852.399902,  3852.399902 ,  12800 , "2000"]
b = [2017-11-24, 3860.520020,  3889.560059, 3856.580078,  3868.340088,  3868.340088 ,   12800, "2017"]

df = pd.DataFrame([a, b], columns = Columns)
df5 = df[2017 - df['Year'].astype(int) <=5]
Columns=[“日期”、“开放分数”、“高分数”、“低分数”、“接近分数”、“调整接近分数”、“容量限制”、“年份”]
a=[2000-11-233837.1101073871.340083826.41992223852.3999023852.39990212800,“2000”]
b=[2017-11-243860.520203889.5600593856.5800783868.340083868.3400812800,“2017”]
df=pd.DataFrame([a,b],columns=columns)

df5=df[2017-df['Year'])。类型(int)唤醒师现在选择了这个答案()arigato gozaimasu