提问人:anna 提问时间:11/18/2023 最后编辑:anna 更新时间:11/18/2023 访问量:40
如何从具有 pandas 所需国家/地区的数据帧中选择员工?
How to select an employee from a dataframe with a desired country in pandas?
问:
我做了一个 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)
但是我得到的是没有数据的空白标题。
答:
过滤不会改变 中行的索引 它只是返回所有计算结果为 的行。因此,当使用 时,您正在尝试按索引访问已被过滤掉的行。这就是为什么你会得到.df[df[col] == var]
df.
df[col]==var
True
.iloc[0,:]
IndexError
为了解决这个问题,你可以使用 after filtering,这将重置行位置 0 在边界内的索引(如果 DataFrame 不为空)。更恰当地,您可以使用 ,它返回 DataFrame 的第一行。.reset_index()
head(1)
评论
不知道你为什么要复杂化这个问题,如果我正确理解你的要求,下面的代码应该能给你带来结果
your_origin_country = "China"
df = df.query('origin_country == @your_origin_country')
评论
df[df['origin_country'].str.contains(your_origin_country)]