我正在研究Titanic Dataset(Kaggle)竞赛。数据集中的一列是“票价”,其中包含浮点值。对于EDA,我已将“票价”列转换为垃圾箱,并为垃圾箱分配了标签。问题在于某些标签已分配给np.nan。
Fare 1284 non-null float64
一些样本值:
0 7.2500
1 71.2833
2 7.9250
3 53.1000
4 8.0500
当我使用qcut将“票价”列转换为垃圾箱时:
dataset['FareBin'] = pd.qcut(dataset['Fare'], 4)
输出:
(-0.001, 7.896] 337
(14.054, 30.071] 322
(30.071, 512.329] 320
(7.896, 14.054] 305
当我想为FareBin列分配标签时出现问题
label1=[1,2,3,4]
bin1=[-0.001,7.896,14.054,30.071,512.329]
dataset['FareBin']=pd.cut(dataset['Fare'],bin1,labels=label1)
我不知道问题是什么。另外,如果有更好的方法,请告诉我。 感谢您抽出宝贵的时间来解决这个问题。
答案 0 :(得分:0)
数据集中只有一个样本缺少票价(#1043)。
例如,像这样执行,然后对值进行装箱:
display(df[df.fare.isna()])
age cabin embarked fare name parch passengerid pclass sex sibsp survived ticket
1043 60.50000 cabin_unknown S nan Storey, Mr. Thomas 0 1044 3 male 0 nan 3701
寻找类似的乘客:
filtered_df = df[(df.pclass == 3) & (df.embarked == "S") & (df.sex == "male") & (df.sibsp == 0) &
(df.parch == 0) & (df.age > 50) & (df.age < 70) & (~df.survived.isna())]
输出:
age cabin embarked fare name parch passengerid pclass sex sibsp survived ticket
94 59.00000 NaN S 7.25000 Coxon, Mr. Daniel 0 95 3 male 0 0.00000 364500
152 55.50000 NaN S 8.05000 Meo, Mr. Alfonzo 0 153 3 male 0 0.00000 A.5. 11206
222 51.00000 NaN S 8.05000 Green, Mr. George Henry 0 223 3 male 0 0.00000 21440
326 61.00000 NaN S 6.23750 Nysveen, Mr. Johan Hansen 0 327 3 male 0 0.00000 345364
406 51.00000 NaN S 7.75000 Widegren, Mr. Carl/Charles Peter 0 407 3 male 0 0.00000 347064
631 51.00000 NaN S 7.05420 Lundahl, Mr. Johan Svensson 0 632 3 male 0 0.00000 347743
填写缺失值:
df.fare.fillna(filtered_df.fare.mean(), inplace=True)
请注意,我已将数据集中的所有列名都小写。您需要相应地调整代码。