在python-pandas中更改索引后使用df.loc时缺少值

时间:2019-01-15 05:33:41

标签: python pandas

将索引更改为“ PassengerId”,然后尝试使用df.loc函数基于新索引检索信息,但结果包含缺失值

正在探索泰坦尼克号数据集。

  
      
  1. 在new_row后面附加了一些值。
  2.   
  3. 将索引更改为PassengerId。
  4.   
  5. 尝试使用df.loc搜索。
  6.   
  7. 获得的结果在现有行中消失,但显示新附加行的值。
  8.   
# 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

2 个答案:

答案 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。逗号解决了这个问题。