pandas 如何选择的子集DataFrame

import pandas as pd
titanic = pd.read_csv("data/titanic.csv")


#pandas 中的Series属性包含(行,列)

titanic.head()   #head() 默认只显示5条
#结果:
   PassengerId  Survived  Pclass                                               Name     Sex  ...  Parch            Ticket     Fare Cabin  Embarked
0            1         0       3                            Braund, Mr. Owen Harris    male  ...      0         A/5 21171   7.2500   NaN         S
1            2         1       1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  ...      0          PC 17599  71.2833   C85         C
2            3         1       3                             Heikkinen, Miss. Laina  female  ...      0  STON/O2. 3101282   7.9250   NaN         S
3            4         1       1       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  ...      0            113803  53.1000  C123         S
4            5         0       3                           Allen, Mr. William Henry    male  ...      0  

如何从中选择特定的列DataFrame


各式各样的例子:

1.我对泰坦尼克号乘客的年龄感兴趣

ages =titanic['Age']
ages.head()

#结果
Out[5]: 
0    22.0
1    38.0
2    26.0
3    35.0
4    35.0
Name: Age, dtype: float64

        
#要选择单个列,请在方括号中[]加上感兴趣的列的名称

#其中的每一列DataFrame都是一个Series。选择单个列后,返回的对象是#pandas DataFrame。我们可以通过检查输出的类型来验证这一点:

In [6]: type(titanic["Age"])
Out[6]: pandas.core.series.Series
    
看看shape输出的:

In [7]: titanic["Age"].shape
Out[7]: (891,)
    
'''
DataFrame.shape是熊猫的属性(请记住有关读写的教程,不要使用括号表示属性)Series并且DataFrame包含行和列的数目:(行,列)。熊猫系列是一维的,仅返回行数
'''

 

#我对泰坦尼克号乘客的年龄和性别感兴趣


In [8]: age_sex = titanic[["Age", "Sex"]]

In [9]: age_sex.head()
Out[9]: 
    Age     Sex
0  22.0    male
1  38.0  female
2  26.0  female
3  35.0  female
4  35.0    male
#要选择多列,请使用选择括号内的列名称列表[]

****************
#注意*****
#内方括号定义了带有列名的 Python列表,而外方括号用于从熊猫中选择数据
In [10]: type(titanic[["Age", "Sex"]])
Out[10]: pandas.core.frame.DataFrame
    
    
In [11]: titanic[["Age", "Sex"]].shape
Out[11]: (891, 2)
'''
该选择返回了DataFrame891行和2列。请记住,a DataFrame是二维的,具有行和列的维。
'''
  • 如何从中过滤特定行DataFrame

  1. 我对35岁以上的乘客感兴趣
    In [12]: above_35 = titanic[titanic["Age"] > 35]
    
    In [13]: above_35.head()
    #要基于条件表达式选择行,请在选择方括号内使用条件[]
    
    #选择括号内的条件检查 列的值大于35的行:titanic["Age"] > 35Age
    
    '''
    条件表达式的输出(>,而且==, !=,<,<=,...将工作)实际上是Pandas Series布尔值的(任一True或False具有相同的行数与原始的)DataFrame。
    通过将其放在选择括号之间,Series可以使用此类布尔值来过滤。仅 将选择为其选择值的行。DataFrame[]True 其中的DataFrame是由891行组成的,通过检查结果的shape属性,看一下满足条件的行数 ''' In [15]: above_35.shape Out[15]: (217, 12)

     


  2. *****isin()条件函数True为提供的列表中的值的每一行返回a
    
    我对2级和3级客舱的泰坦尼克号乘客感兴趣
    class_23 = titanic[titanic["Pclass"].isin([2, 3])]
    class_23.head()
    
    '''
    与条件表达式类似,isin()条件函数True为提供的列表中的值的每一行返回a 。要基于此类函数过滤行,请使用选择括号内的条件函数[]。
    在这种情况下,选择括号内的条件将检查列的第2 行或第3行。titanic["Pclass"].isin([2, 3])Pclass ''' class_23 = titanic[(titanic["Pclass"] == 2) | (titanic["Pclass"] == 3)] #这种和上面的效果是一样的 #注意!!! #组合多个条件语句是,每个条件必须用括号括起来()。而且不能使用and或or需要使用or的运算符|和and运算符&

     

  3. 我想使用已知年龄的乘客数据
    age_no_na = titanic[titanic["Age"].notna()]
    age_no_na.head()
    '''
    notna()条件函数返回一个True为每一行中的值不是一个Null值。这样,可以将其与选择括号结合使用[]以过滤数据表
    '''

     

  • 如何从中选择特定的行和列DataFrame


  1. 我对35岁以上的乘客的名字感兴趣
    adult_names = titanic.loc[titanic["Age"] > 35, "Name"]
    adult_names.head()
    
    '''
    在这种一次性创建了行和列的子集,仅使用[]已经不行,需要使用
    loc或者iloc,逗号前的部分是您想要的行,逗号后是想要选择的列
    '''

     

  2. 我对第10至25行和第3至5行感兴趣
     titanic.iloc[9:25, 2:5]
        
    当使用loc或选择特定的行和/或列时iloc,可以将新值分配给所选数据。例如,要将名称分配给anonymous第三列的前三个元素:
    #查找第一个到第三个数据,并且将前三列的名称改为anonymous
    titanic.iloc[0:3, 3] = "anonymous"

     

  3. #总结
    1)选择数据子集时,使用方括号[]。
    
    2)在这些括号内,您可以使用单个列/行标签,列/行标签列表,标签切片,条件表达式或冒号。
    
    3)loc使用行和列名称时选择特定的行和/或列
    
    4)iloc使用表格中的位置时选择特定的行和/或列
    
    5)您可以基于loc/ 为选择分配新值iloc。

     

 

 

上一篇:1,514人罹难,泰坦尼克号沉船事故背后的数据统计如何?


下一篇:决策树与随机森林实例