我的项目遇到了一些问题,因为当我尝试比较两个字符串(一个来自pandas数据帧,一个来自代码)时,会出现意外行为。 我在pandas数据框中加载了列:[“国家”,“地区”,“城市”,“人口”,“新冠病毒病例],以找到最后两个变量之间的最终相关性
df = pd.DataFrame(columns = ['Country','Region','City','Population','Cases'])
我想将给定区域(例如意大利南部)的所有人口保存在一个列表中,以绘制该区域,因此我使用列表理解来完成此操作:
pop_sud = [int(df.iloc[i][3]) for i in range(len(df.index)) if str(df.iloc[i][0])=='Italy'
if str(df.iloc[i][1])=='Sicilia']
结果是,第二个“if”语句似乎始终为false,给了我一个空列表,这与我在用单词“Sicilia”打印Region列的所有元素时进行的小调试不同:
Region type: <class 'str'>
---
Puglia Sicilia
Lombardia Sicilia
Emilia Sicilia
Sicilia Sicilia <--
Toscana Sicilia
Veneto Sicilia
Veneto Sicilia
我也尝试过这个版本,但仍然给我一个空列表,因为if检查没有通过:
cases_sud = [int(df.iloc[i][4]) for i in range(len(df.index)) if df.iloc[i][0] == 'Italy'
if df.loc[i][1] in ['Sicilia','Puglia','Campania']]
我还尝试将if语句与关键字and
连接起来,以获得相同的结果。
为什么会发生这种情况
更新:
谢谢大家的回答。通过阅读WGP的答案,我发现我的数据集在所有区域名称之前都有一个空格,因此甚至没有阅读单词!我还尝试了Gergely的方法,尽管数据集中有很多空间,但它仍然有效。谢谢大家!:)
尝试按“布尔索引”筛选:
https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#boolean-indexing
这篇文章用很好的例子详细地解释了这一点:
https://appdividend.com/2019/01/25/pandas-boolean-indexing-example-python-tutorial/
因此,如果您有此数据集:
您可以通过以下方式按国家和地区进行筛选:
结果:
要仅获取“案例”列,请执行以下操作:
结果:
我不知道这是否是您的问题,因为我不确定您的数据帧到底是什么样子,因为我只有您给我的代码中的列。但是看起来你的区域从来就不是
Sicilia
,它前面似乎有一个单词,在这种情况下,你的第二个if语句将始终返回false我想你想把它改成类似
您也可以在不理解列表的情况下执行此操作,代码如下所示
相关问题 更多 >
编程相关推荐