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