69_Pandas.DataFrame獲取行號和列號
將講解如何從pandas.DataFrame的行名和列名中獲取行號和列號,以及如何從列元素的值中獲取行名和行號。
下面對內容進行說明。
- 根據(jù)行名和列名獲取行號和列號
- get_loc() 方法
- 當行名和列名重復時
- 列表索引、列
- get_loc() 方法
- 從列元素值獲取行名稱和行號
如果想從行號或列號中獲取行、列或元素的值,請參考下面的文章。
- 04_Pandas獲取和修改任意位置的值(at,iat,loc,iloc)
- 28_Pandas通過index選擇并獲取行和列
以下面的 pandas.DataFrame 為例。
import pandas as pd
df = pd.read_csv('data/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
根據(jù)行名和列名獲取行號和列號
get_loc() 方法
有一個名為 get_loc() 的方法用于獲取 pandas.DataFrame 的索引和列。
如果指定行名或列名作為參數(shù),則將返回行號和列號。行號和列號都是從0開始的整數(shù)。 行號是從索引中獲取的。
print(df.index.get_loc('Alice'))
# 0
print(df.index.get_loc('Ellen'))
# 4
列號是從列中獲得的。
print(df.columns.get_loc('age'))
# 0
print(df.columns.get_loc('point'))
# 2
無論哪種情況,對于不存在的名稱都會發(fā)生 KeyError 錯誤。
# print(df.index.get_loc('XXX'))
# KeyError: 'XXX'
# print(df.columns.get_loc('XXX'))
# KeyError: 'XXX'
當行名和列名重復時
如果行名或列名重復,請小心。以下示例使用重復的行名稱,但這同樣適用于列名稱。 使用 rename() 方法更改行名稱并準備重復的行名稱。
- 01_Pandas.DataFrame的行名和列名的修改
df_dup = df.rename(index={'Charlie': 'Bob'})
print(df_dup)
# age state point
# name
# Alice 24 NY 64
# Bob 42 CA 92
# Bob 18 CA 70
# Dave 68 TX 70
# Ellen 24 CA 88
# Frank 30 NY 57
在這種情況下,get_loc()方法返回一個切片類型對象而不是行號。
print(df_dup.index.get_loc('Bob'))
# slice(1, 3, None)
print(type(df_dup.index.get_loc('Bob')))
# <class 'slice'>
添加更多重復的行名稱。
df_dup.rename(index={'Ellen': 'Bob'}, inplace=True)
print(df_dup)
# age state point
# name
# Alice 24 NY 64
# Bob 42 CA 92
# Bob 18 CA 70
# Dave 68 TX 70
# Bob 24 CA 88
# Frank 30 NY 57
如果無法用切片表示,則它將是 bool 類型的 NumPy 數(shù)組 numpy.ndarray。
print(df_dup.index.get_loc('Bob'))
# [False True True False True False]
print(type(df_dup.index.get_loc('Bob')))
# <class 'numpy.ndarray'>
slice 對象和 bool 類型數(shù)組都可以用于索引引用和 iloc 定位。 bool 類型數(shù)組也可以與 loc 一起使用。
- 04_Pandas獲取和修改任意位置的值(at,iat,loc,iloc)
- 28_Pandas通過index選擇并獲取行和列
print(df_dup[df_dup.index.get_loc('Bob')])
# age state point
# name
# Bob 42 CA 92
# Bob 18 CA 70
# Bob 24 CA 88
print(df_dup.iloc[df_dup.index.get_loc('Bob'), 0])
# name
# Bob 42
# Bob 18
# Bob 24
# Name: age, dtype: int64
注意,對于索引,可以使用query()方法提取元素,而不需要使用get_loc()獲取切片對象或bool類型數(shù)組。
print(df_dup.query('index == "Bob"'))
# age state point
# name
# Bob 42 CA 92
# Bob 18 CA 70
# Bob 24 CA 88
即使行名和列名重復,如果您想要獲取行號和列號而不是切片對象或 bool 類型數(shù)組,請按如下所述列出索引和列。
列表索引、列
索引和列可以使用list()轉換為標準Python列表(列表類型對象)。
l_index = list(df.index)
print(l_index)
# ['Alice', 'Bob', 'Charlie', 'Dave', 'Ellen', 'Frank']
print(type(l_index))
# <class 'list'>
l_columns = list(df.columns)
print(l_columns)
# ['age', 'state', 'point']
print(type(l_columns))
# <class 'list'>
可以使用列表的 index() 方法獲取索引(元素數(shù)量)。
print(l_index.index('Bob'))
# 1
如果行名稱重復,您可以使用內置函數(shù) enumerate() 和列表理解來獲取索引列表。
l_index_dup = list(df_dup.index)
print(l_index_dup)
# ['Alice', 'Bob', 'Bob', 'Dave', 'Bob', 'Frank']
print([i for i, x in enumerate(l_index_dup) if x == 'Bob'])
# [1, 2, 4]
從列元素值獲取行名稱和行號
我們不會從行名和列名中獲取行號和列號,而是向您展示如何從任意列的元素中獲取相應的行名和行號。 繼續(xù)使用下面的 pandas.DataFrame 作為示例。
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
可以使用 query() 方法根據(jù)任何列中元素的條件提取行。返回值是pandas.DataFrame。
print(df.query('state == "CA"'))
# age state point
# name
# Bob 42 CA 92
# Charlie 18 CA 70
# Ellen 24 CA 88
通過列出使用 query() 提取的 pandas.DataFrame 的索引,可以獲得特定值的行名稱列表。
print(list(df.query('state == "CA"').index))
# ['Bob', 'Charlie', 'Ellen']
如果僅提取一行,則同樣適用。如果您想要行名稱值而不是列表,只需獲取索引的第一個元素 [0] 即可。文章來源:http://www.zghlxwxcb.cn/news/detail-790765.html
print(df.query('state == "TX"'))
# age state point
# name
# Dave 68 TX 70
print(list(df.query('state == "TX"').index))
# ['Dave']
print(df.query('state == "TX"').index[0])
# Dave
如果想獲取行號而不是行名,請使用reset_index()將索引重置為從0開始的連續(xù)數(shù)字,然后執(zhí)行相同的過程。文章來源地址http://www.zghlxwxcb.cn/news/detail-790765.html
- 21_Pandas.DataFrame,重置Series的索引index(reset_index)
print(df.reset_index())
# name age state point
# 0 Alice 24 NY 64
# 1 Bob 42 CA 92
# 2 Charlie 18 CA 70
# 3 Dave 68 TX 70
# 4 Ellen 24 CA 88
# 5 Frank 30 NY 57
print(list(df.reset_index().query('state == "CA"').index))
# [1, 2, 4]
print(list(df.reset_index().query('state == "TX"').index))
# [3]
print(df.reset_index().query('state == "TX"').index[0])
# 3
到了這里,關于69_Pandas.DataFrame獲取行號和列號的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!