30_Pandas.DataFrame提取(选择)指定行名和列名的行和列

30_Pandas.DataFrame提取(选择)指定行名和列名的行和列

从pandas.DataFrame中提取(选择)行名称(索引名称)和列名称(列名称)满足特定条件的行或列。

了解如何提取元素包含特定字符串而不是行名/列名的行,参阅以下文章。

步骤基本上是相同的:使用pandas字符串方法获取布尔数组,并使用它来提取具有布尔索引引用的行或列。

pandas字符串方法具有以下功能。

  • str.contains():包含特定的字符串
  • str.endswith():以特定字符串结尾
  • str.startswith():以特定的字符串开头
  • str.match():匹配正则表达式模式

在此,对于以下内容进行说明:

  • 提取行名称满足条件的行
    • query()
  • 提取具有满足条件的列名的列
  • 提取满足条件的行名和列名的元素

以下面的数据为例。

import pandas as pd

df = pd.read_csv('./data/30/sample_pandas_normal.csv', index_col=0)
print(df)
#          age state  point
# name
# Alice     24    NY     64
# Bob       42    CA     92
# Charlie   18    CA     70
# Dave      68    TX     70
# Ellen     24    CA     88
# Frank     30    NY     57

提取行名称满足条件的行

将字符串方法应用于可以通过index属性获得的索引对象。

print(df.index)
# Index(['Alice', 'Bob', 'Charlie', 'Dave', 'Ellen', 'Frank'], dtype='object', name='name')

print(df.index.str.contains('li'))
# [ True False  True False False False]

参阅获得的布尔序列中的行。

print(df[df.index.str.contains('li')])
#          age state  point
# name                     
# Alice     24    NY     64
# Charlie   18    CA     70

该方法与其他字符串方法相同。

print(df.index.str.endswith('e'))
# [ True False  True  True False False]

print(df[df.index.str.endswith('e')])
#          age state  point
# name                     
# Alice     24    NY     64
# Charlie   18    CA     70
# Dave      68    TX     70

query()

也可以使用query()方法指定索引条件。

如果已安装numexpr,则需要指定参数engine =‘python’(numexpr版本2.6.5,pandas版本0.23.0)。
可以通过索引或索引列的名称(示例中的名称)指定索引列。

print(df.query('index.str.contains("li")', engine='python'))
#          age state  point
# name                     
# Alice     24    NY     64
# Charlie   18    CA     70

print(df.query('name.str.endswith("e")', engine='python'))
#          age state  point
# name                     
# Alice     24    NY     64
# Charlie   18    CA     70
# Dave      68    TX     70

提取具有满足条件的列名的列

对于列名,将字符串方法应用于可以通过columns属性获得的索引对象。

print(df.columns)
# Index(['age', 'state', 'point'], dtype='object')

print(df.columns.str.endswith('e'))
# [ True  True False]

列的布尔索引引用为loc [:.Bool array]。

该位置由列名指定/行名是loc,位置由行号指定/列号是iloc,但是在使用布尔索引引用的情况下,loc或iloc均可接受。

print(df.loc[:, df.columns.str.endswith('e')])
#          age state
# name              
# Alice     24    NY
# Bob       42    CA
# Charlie   18    CA
# Dave      68    TX
# Ellen     24    CA
# Frank     30    NY

print(df.iloc[:, df.columns.str.endswith('e')])
#          age state
# name              
# Alice     24    NY
# Bob       42    CA
# Charlie   18    CA
# Dave      68    TX
# Ellen     24    CA
# Frank     30    NY

有关loc和iloc的详细信息,请参阅以下文章。

提取满足条件的行名和列名的元素

还可以为行名和列名指定条件。

将所需的字符串方法应用于索引和列,并使用loc或iloc引用布尔索引。

print(df.loc[df.index.str.contains('li'), df.columns.str.endswith('e')])
#          age state
# name              
# Alice     24    NY
# Charlie   18    CA
  • 33
    点赞
  • 131
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值