jro*_*112 8 python indexing pandas
我有一个数据框,其中索引不是数字而是字符串(特别是国家/地区名称),并且它们都是唯一的。给定一个国家/地区的名称,如何找到其行号(索引的“数字”值)?
我尝试过df[df.index == 'country_name'].index,但这不起作用。
我们可以用Index.get_indexer:
df.index.get_indexer(['Peru'])
[3]
Run Code Online (Sandbox Code Playgroud)
RangeIndex或者我们可以根据 DataFrame 的大小构建一个子集:
pd.RangeIndex(len(df))[df.index == 'Peru']
Int64Index([3], dtype='int64')
Run Code Online (Sandbox Code Playgroud)
由于我们只寻找单个标签并且索引“都是唯一的”,我们还可以使用Index.get_loc:
df.index.get_loc('Peru')
3
Run Code Online (Sandbox Code Playgroud)
示例数据框:
import pandas as pd
df = pd.DataFrame({
'A': [1, 2, 3, 4, 5]
}, index=['Bahamas', 'Cameroon', 'Ecuador', 'Peru', 'Japan'])
Run Code Online (Sandbox Code Playgroud)
df:
A
Bahamas 1
Cameroon 2
Ecuador 3
Peru 4
Japan 5
Run Code Online (Sandbox Code Playgroud)
pd.Index.get_indexer我们可以使用它pd.Index.get_indexer来获取整数索引。
idx = df.index.get_indexer(list_of_target_labels)
# If you only have single label we can use tuple unpacking here.
[idx] = df.index.get_indexer([country_name])
Run Code Online (Sandbox Code Playgroud)
注意:
pd.Index.get_indexer获取一个列表并返回一个列表。从 0 到 n - 1 的整数表示这些位置的索引与相应的目标值匹配。目标中的缺失值标记为 -1。
np.where您也可以np.where在这里使用。
idx = np.where(df.index == country_name)[0]
Run Code Online (Sandbox Code Playgroud)
list.index我们还可以list.index在转换Pd.Index为列表后使用pd.Index.tolist
idx = df.index.tolist().index(country_name)
Run Code Online (Sandbox Code Playgroud)