Dataframe 中的值无意中满足了 If 语句

问题描述 投票:0回答:1

我正在尝试解决为什么会发生这种情况。我正在尝试浏览我的数据框,同时跳过不完整的数据。在我的数据框中,“收入中位数”列在相应的行中要么具有数值,要么具有“未知”或“不可用”。即使第一个条件不一定得到满足(提供了数字点),我的程序也将始终跳过该行。有谁知道为什么会发生这种情况?预先感谢

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)
python pandas dataframe for-loop if-statement
1个回答
0
投票

简单回答

就像其他人所说的那样,你有错误的

if
逻辑。

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

这等于:

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

当在 if 中使用

"Unavailable"
时,其真值始终计算为
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"

© www.soinside.com 2019 - 2024. All rights reserved.