Python 我不明白为什么我的数据集中的列是NaN
我试图通过这个循环创建一个票价区间(1/2/3),但它似乎不起作用Python 我不明白为什么我的数据集中的列是NaN,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我试图通过这个循环创建一个票价区间(1/2/3),但它似乎不起作用 traindf['FareBand'] = np.nan for index, row in traindf.iterrows(): if row['Fare'] <= 13.675550: row['FareBand'] = 1 elif row['Fare'] <= 20.662183 and row['Fare'] > 13.675550: row['Fa
traindf['FareBand'] = np.nan
for index, row in traindf.iterrows():
if row['Fare'] <= 13.675550:
row['FareBand'] = 1
elif row['Fare'] <= 20.662183 and row['Fare'] > 13.675550:
row['FareBand'] = 2
else:
row['FareBand'] = 3
原因可能是什么?我建议使用:
traindf=pd.DataFrame({'Fare':[10,15,3,30]})
m1=traindf['Fare']我建议使用:
traindf=pd.DataFrame({'Fare':[10,15,3,30]})
m1=traindf['Fare']您可以在不使用循环的情况下分三步执行此操作:
traindf['FareBand'] = 3
traindf.loc[traindf['Fare'].between(13.675550, 20.662183), 'FareBand'] = 2
traindf.loc[traindf['Fare'].le(13.675550), 'FareBand'] = 1
您可以在不使用循环的情况下分三步执行此操作:
traindf['FareBand'] = 3
traindf.loc[traindf['Fare'].between(13.675550, 20.662183), 'FareBand'] = 2
traindf.loc[traindf['Fare'].le(13.675550), 'FareBand'] = 1
如果要使用所描述的方法,在循环内部应用更改,则只需在特定索引位置设置数据帧行的值:
for index, row in traindf.iterrows():
if row['Fare'] <= 13.675550:
row['FareBand'] = 1
elif row['Fare'] <= 20.662183 and row['Fare'] > 13.675550:
row['FareBand'] = 2
else:
row['FareBand'] = 3
traindf.loc[index] = row
对于traindf.iterrows()中的索引行:
如果行['Fare']如果要使用所描述的方法,在循环内部应用更改,则只需在特定索引位置设置数据帧行的值:
for index, row in traindf.iterrows():
if row['Fare'] <= 13.675550:
row['FareBand'] = 1
elif row['Fare'] <= 20.662183 and row['Fare'] > 13.675550:
row['FareBand'] = 2
else:
row['FareBand'] = 3
traindf.loc[index] = row
对于traindf.iterrows()中的索引行:
如果行['Fare']看到整个数据集的更改可能在某个地方出现。。。另外,请在一个小数据行(如10行)上执行代码,然后在此处更新。查看整个数据集的更改可能在某个地方发生。。。另外,请在一个小数据(如10行)上执行代码,然后在此更新。请谨慎使用between,因为
不可能设置。什么是.le do@Alexless小于或等于,请参阅谨慎使用between,因为
不可能设置。什么是.le do@Alexless小于或等于,请参阅
for index, row in traindf.iterrows():
if row['Fare'] <= 13.675550:
row['FareBand'] = 1
elif row['Fare'] <= 20.662183 and row['Fare'] > 13.675550:
row['FareBand'] = 2
else:
row['FareBand'] = 3
traindf.loc[index] = row