如何从具有 pandas 所需国家/地区的数据帧中选择员工?

How to select an employee from a dataframe with a desired country in pandas?

提问人:anna 提问时间:11/18/2023 最后编辑:anna 更新时间:11/18/2023 访问量:40

问:

我做了一个 python 代码,根据所需的国家/地区从数据帧中选择员工。代码如下:

import pandas as pd
import matplotlib.pyplot as plt
import requests
from bs4 import BeautifulSoup

your_origin_country = 'China'

employee_data = df
employee_data

selected_employee = employee_data[employee_data['origin_country'] == your_origin_country].iloc[0]

我的数据帧如下:

| first_name | last_name | email |gender | position | salary | origin_country |
|:---- |:------:| :-----:|:-----:|:-----:|:-----:|-----:|
| Tawnya  | Witheford    | [email protected] | Female | Technical Architect | 58286 | Russia
| Anna  | Witheford    | [email protected] | Female | Technical Architect | 58286 | Mexico
| Annie  | Witheford    | [email protected] | Female | Technical Architect | 58286 | China

它显示错误如下图所示:


IndexError 回溯(最近一次调用最后一次) 在<细胞系中:14>() 12 # 假设你有一个名为 'employee_data' 的 DataFrame,其中包含 'origin_country'、'employee_id' 等列 13 # 将 'employee_data' 替换为实际的 DataFrame ---> 14 selected_employee = employee_data[employee_data['origin_country'] == your_origin_country].iloc[0,:]

4 帧 /usr/local/lib/python3.10/dist-packages/pandas/core/indexing.py _validate_integer(self, key, axis) 1555 len_axis = len(self.obj._get_axis(轴)) 如果键 >= len_axis 或键 < -len_axis,则为 1556: -> 1557 引发 IndexError(“单个位置索引器越界”) 1558 1559 # -------------------------------------------------------------------

IndexError:单个位置索引器越界

我employee_data是数据帧。我想从数据帧中选择一名国家/地区名称为“中国”的员工。但是我遇到了上述错误。谁能帮我解决这个问题?

我根据一些用户的以下评论更新了代码:

import pandas as pd
import matplotlib.pyplot as plt
import requests
from bs4 import BeautifulSoup

# Step 1: Select an Employee
# Replace 'your_origin_country' with the desired country
your_origin_country = 'Canada'

employee_data = df
employee_data
# Assuming you have a DataFrame named 'employee_data' with columns like 
'origin_country', 'employee_id'
# Replace 'employee_data' with your actual DataFrame
selected_employee = employee_data[employee_data['origin_country'] == your_origin_country].reset_index()
selected_employee.head(1)

但是我得到的是没有数据的空白标题。

评论

0赞 Suraj Shourie 11/18/2023
将数据帧和错误回溯作为文本而不是图像发布
0赞 anna 11/18/2023
好。。。。。。。。。。。。。
0赞 anna 11/18/2023
我已将图像更改为文本。
0赞 Suraj Shourie 11/18/2023
您的数据帧中是否有“中国”/“加拿大”?检查它是否有任何尾随或前导空格等。可能会读取一些额外的字符,这可能会导致您出现错误。
0赞 Suraj Shourie 11/18/2023
你能检查这是否返回任何东西吗?df[df['origin_country'].str.contains(your_origin_country)]

答:

0赞 user22936095 11/18/2023 #1

过滤不会改变 中行的索引 它只是返回所有计算结果为 的行。因此,当使用 时,您正在尝试按索引访问已被过滤掉的行。这就是为什么你会得到.df[df[col] == var]df.df[col]==varTrue.iloc[0,:]IndexError

为了解决这个问题,你可以使用 after filtering,这将重置行位置 0 在边界内的索引(如果 DataFrame 不为空)。更恰当地,您可以使用 ,它返回 DataFrame 的第一行。.reset_index()head(1)

评论

0赞 anna 11/18/2023
我试过了。但我没有得到任何数据。我已经给出了上面修改后的数据。
0赞 Sridhar Iyer 11/18/2023 #2

不知道你为什么要复杂化这个问题,如果我正确理解你的要求,下面的代码应该能给你带来结果

your_origin_country = "China"
df = df.query('origin_country == @your_origin_country')

评论

0赞 anna 11/18/2023
我试过这个。但是我得到一个空白表,没有数据,只有标题