在进行探索性数据分析(EDA)的时候,由于数据太多,我们需要对数据进行筛选来查看我们想注重观察的特征或者值,pandas虽然没有excel这样的图形界面和按钮能,但是我们也可以通过简短的代码完成数据筛选的。

  • data[data['Loan_Status' == 'Y']['Loan_Status']选中了Loan_Status这列中等于‘Y’的所有行,组成的数据,再定位在Loan_Status这列
  • df[df['product_color'].str.contains('&', na=False)]['product_color'].unique()可以查询某列中包含‘&’的所有唯一值,这个方法可以拓展到任意的字符,对于我们筛选数据有很大的帮助
  • data[['出院时间','入院时间']].head()筛选多列

在pandas中使用.iloc[]索引数据如果索引出来的结果是单列的,返回的结果是series,而不是DATa Frame,这个时候可以加一个中括号在数字中

  1. # 返回一个DataFrame
  2. df.iloc[[0],[1]]
  3. # 返回单个值
  4. df.iloc[0,1]

提取 中国、美国、英国、日本、巴西 五行数据

  1. df[df['国家奥委会'].apply(lambda x: x in ['中国','美国','英国','日本','巴西'])]

在上面的条件下再加上,金牌数大于30这一个条件

  1. df[(df['国家奥委会'].apply(lambda x: x in ['中国',"美国",'英国','日本','巴西']))
  2. & (df['金牌数'] > 30)]

进行混合搜索,比如行索引是数字,列索引是文本的,提取行索引为 4 ,列名为金牌数的值

  1. df.at[4,'金牌数']
  2. df.loc[4,'金牌数']

上面两行的代码效果是一样的。

挑选文本类和数值类的特征

  1. numerical_fea = list(data_train.select_dtypes(exclude=['object']).columns)
  2. category_fea = list(filter(lambda x: x not in numerical_fea,list(data_train.columns)))
  3. label = 'isDefault'
  4. numerical_fea.remove(label)
  • 通过select.dtypes挑选出类型不是数值的列,这里使用了参数exclude=['object'].df.columns用于返回整个数据表中的每个列名
  • filter函数对dataframe进行过滤,如果不在上面的numerical_fea中的列名就会被分类到文本类型中category_fea

根据长度进行筛选

筛选分组编码字符小于4的,只返回机构名称和分组编码两列

  1. data.loc[data['分组编码'].str.len()<4, ['机构名称','分组编码']]