数据框中的值意外满足条件语句

-2 投票
1 回答
34 浏览
提问于 2025-04-14 17:36

我正在尝试找出为什么会出现这个问题。我想在处理我的数据框时跳过不完整的数据。在我的数据框中,“中位收入”这一列要么有一个数字,要么在相应的行中显示“未知”或“不可用”。但是我的程序总是会跳过这一行,即使第一个条件(提供了一个数字)并不一定满足。有没有人知道为什么会这样?谢谢大家!

another_list = []
df = pd.read_excel('C:/Users/Miles/PycharmProjects/pythonProject1/Reservation Data.xlsx')

for all_entries in range(len(df['Median Income'])):
    variable = df.at[all_entries, 'Median Income']
    if variable == "Unknown" or 'Unavailable':
        print(f'Passed {variable}')
        pass
    else:
        print('condition')
        another_list.append([df.at[all_entries, 'Native American Population'],df.at[all_entries, 'Median Income']])

print(another_list)

1 个回答

0

简单回答

就像其他人说的,你的 if 逻辑有问题。

if variable == "Unknown" or "Unavailable":

这等于:

if (variable == "Unknown") or ("Unavailable"):

而且,当 "Unavailable" 用在 if 语句中时,它的真值总是被认为是 True(因为它是一个非空字符串),所以这个条件没有意义。

正确的写法当然是,正如之前提到的:

if variable == "Unknown" or variable == "Unavailable":
    ...

或者

if variable in ["Unknown", "Unavailable"]:

更好的解决方案

不过,你这样做的方式太复杂了。

我们来看看一个虚构的数据框,像这样:

df = pd.DataFrame(
    {
        "Median Income": [10, 20, "Unknown", "Unavailable", 30], 
        "Native American Population": [5, 10, 2, 4, 10]
    }
)

要把 "Unknown""Unavailable" 过滤掉,你可以这样做:

filtered_df = df[~df["Median Income"].isin(["Unknown", "Unavailable"])]

换句话说:从 df 中,取出所有行([]),这些行的 "Median income" 不是 "Unknown""Unavailable"

撰写回答