回来 'not in the index'

Getting back 'not in the index'

这是来自 DataCamp 的练习,在网站和 PyCharm Interpreter

上都能正常工作
# Pre-defined lists
names = ['United States', 'Australia', 'Japan', 'India', 'Russia', 'Morocco', 'Egypt']
dr = [True, False, False, False, True, True, True]
cpc = [809, 731, 588, 18, 200, 70, 45]

import pandas as pd

# Create dictionary my_dict with three key:value pairs: my_dict
my_dict = {"country": names, "drives_right": dr, "cars_per_cap": cpc}

# Build a DataFrame cars from my_dict: cars
cars = pd.DataFrame(my_dict)

# Print cars
print(cars)


print("\n*Using 'loc':")
print(cars.loc[[1]])

就在这里休息

print(cars.loc[[names]])

*说 'names' 不在索引中

我相信你想做的是filter by column value(s)。您可以简单地执行 [1] 或设置数据框的索引,如 [2].

[1] 按列值筛选
print(cars[cars['country'] == names])
# or print(cars[cars['country'].isin(names)])
[2] 索引数据名
cars_indexed = cars.set_index("country")
cars_indexed.loc[names]
结果

[result 1]

[result 2]

p.s。 pandas loc 主要基于标签

阅读 documentation,您可以看到 df.loc 将从索引中访问元素。在您的例子中,索引是 0,1,...,6。这就是它给您错误的原因 - 索引根本没有这些元素。如果您要将索引定义为字符串数组,就像它们在文档中所做的那样(我建议您查看示例),您可以获得具有这些字符串索引的行。

DataFrame.loc 用于按标签select 索引或列header。 names 是列值。如果你想 select 值在列表中的行,你可以尝试 isin 使用布尔掩码。

print(cars[cars['country'].isin(names)])