将索引更改为“ PassengerId”,然后尝试使用df.loc
函数基于新索引检索信息,但结果包含缺失值
正在探索泰坦尼克号数据集。
- 在new_row后面附加了一些值。
- 将索引更改为PassengerId。
- 尝试使用df.loc搜索。
- 获得的结果在现有行中消失,但显示新附加行的值。
# Loading the dataset in to a Data Frame
dataset= pd.read_csv('Titanic_train.csv')
# Add a New Row at the bottom to the Dataset
new_row=pd.Series(data=['892','0','1','NA','NA','NA'], index=['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age'])
dataset=dataset.append(new_row, ignore_index=True)
# Setting PassengerId as Index
dataset= dataset.set_index(dataset['PassengerId'])
dataset.loc[['892','891','890']]
获得以下结果:
NaN for all the rows except for the new_row(892)
FutureWarning: Passing list-likes to .loc or [] with any missing label will raise
KeyError in the future, you can use .reindex() as an alternative`
See the documentation here:
https://pandas.pydata.org/pandas-docs/stable/indexing.html#deprecate-loc-reindex-listlike
PassengerId PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
892 892 0 1 NA NA NA NaN NaN NaN NaN NaN NaN
891 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
890 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
预期结果:
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
PassengerId
890 890 1 1 Behr, Mr. Karl Howell male 26 0.0 0.0 111369 30.00 C148 C
891 891 0 3 Dooley, Mr. Patrick male 32 0.0 0.0 370376 7.75 NaN Q
892 892 0 1 NA NA NA NaN NaN NaN NaN NaN NaN
答案 0 :(得分:1)
部分答案:
运行测试...
import pandas as pd
import numpy as np
dataset= pd.DataFrame(columns=["PassengerId","Survived","Pclass","Name","Sex","Age","SibSp","Parch","Ticket","Fare","Cabin","Embarked"],data=[[891,1,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan],[892,2,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan]])
print(dataset)
# Add rows
new_row=pd.Series(data=['890','0','1','NA','NA','NA'], index=['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age'])
dataset=dataset.append(new_row, ignore_index=True)
# Setting PassengerId as Index
dataset= dataset.set_index(dataset['PassengerId'])
dataset.loc[[892,891,890]]
print(dataset)
并产生以下结果:
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare \
0 891 1 NaN NaN NaN NaN NaN NaN NaN NaN
1 892 2 NaN NaN NaN NaN NaN NaN NaN NaN
Cabin Embarked
0 NaN NaN
1 NaN NaN
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket \
PassengerId
891 891 1 NaN NaN NaN NaN NaN NaN NaN
892 892 2 NaN NaN NaN NaN NaN NaN NaN
890 890 0 1 NA NA NA NaN NaN NaN
Fare Cabin Embarked
PassengerId
891 NaN NaN NaN
892 NaN NaN NaN
890 NaN NaN NaN
似乎正是您想要的
答案 1 :(得分:0)
在添加new_row时,我提到了int类型列的值,例如“ PassengerId”,“ Age”等为“ 892”,而不是仅892。这已将大多数列的类型从int更改为object。逗号解决了这个问题。