Python 3.x PYTHON在iloc[]代码中使用Dataframe SENSEI Dataframe奇怪的索引器,用于将行从一个数据帧复制到另一个数据帧
在Windows 10上基于Anaconda3的Spyder上使用Python 3.5,使用2个GPU机器: 我正在使用日本空手道大师数据集检查在过去5年中获得硕士学位的大师,并将其所有行复制到另一个Pandas Dataframe sensei5yrs进行进一步处理: 我需要将一行一行从一个熊猫数据帧“sensei”复制到另一个熊猫数据帧sensei5yrs我正在使用以下代码,但失败了: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
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