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