Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在“String”类型的pd.dataframe上使用iloc时,字符串比较始终为false_Python_Pandas_Dataframe - Fatal编程技术网

Python 在“String”类型的pd.dataframe上使用iloc时,字符串比较始终为false

Python 在“String”类型的pd.dataframe上使用iloc时,字符串比较始终为false,python,pandas,dataframe,Python,Pandas,Dataframe,我的项目遇到了一些问题,因为当我尝试比较两个字符串(一个来自pandas数据帧,一个来自代码)时,会出现意外行为。 我在pandas数据框中加载了列:[“国家”,“地区”,“城市”,“人口”,“新冠病毒病例],以找到最后两个变量之间的最终相关性 df=pd.DataFramecolumns=[“国家”、“地区”、“城市”、“人口”、“案例”] 我想将给定区域的所有人口(例如意大利南部)保存在一个列表中,以绘制该区域,因此我使用列表理解功能进行了此操作: 如果strdf.iloc[i][0]='I

我的项目遇到了一些问题,因为当我尝试比较两个字符串(一个来自pandas数据帧,一个来自代码)时,会出现意外行为。 我在pandas数据框中加载了列:[“国家”,“地区”,“城市”,“人口”,“新冠病毒病例],以找到最后两个变量之间的最终相关性

df=pd.DataFramecolumns=[“国家”、“地区”、“城市”、“人口”、“案例”] 我想将给定区域的所有人口(例如意大利南部)保存在一个列表中,以绘制该区域,因此我使用列表理解功能进行了此操作:

如果strdf.iloc[i][0]='Italy' 如果strdf.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语句与关键字连接起来,并获得相同的结果。 为什么会发生这种情况

更新:
谢谢大家的回答。通过阅读WGP的答案,我发现我的数据集在所有区域名称之前都有一个空格,因此甚至没有阅读单词!我还尝试了Gergely的方法,尽管数据集中有很多空间,但它仍然有效。谢谢大家!:

我不知道这是否是您的问题,因为我不确定您的数据帧到底是什么样子,因为我只有您给我的代码中的列。但看起来你所在的地区绝不仅仅是西西里岛,它前面似乎有一个词,在这种情况下,你的第二个if语句将始终返回false

我想你想把它改成类似

pop_sud = [
    int(df.iloc[i][3]) 
    for i in range(len(df.index)) 
    if str(df.iloc[i][0])=='Italy'
    if df['Region'].str.contains('Sicilia')[i]
]
您也可以在不理解列表的情况下执行此操作,代码如下所示

pop_sud = df.query(
    "Country == 'Italy' & 
    Region.str.contains('Sicilia')"
)['Cases'].astype(int).tolist()

我不知道这是否是您的问题,因为我不确定您的数据帧到底是什么样子,因为我只有您给我的代码中的列。但看起来你所在的地区绝不仅仅是西西里岛,它前面似乎有一个词,在这种情况下,你的第二个if语句将始终返回false

我想你想把它改成类似

pop_sud = [
    int(df.iloc[i][3]) 
    for i in range(len(df.index)) 
    if str(df.iloc[i][0])=='Italy'
    if df['Region'].str.contains('Sicilia')[i]
]
您也可以在不理解列表的情况下执行此操作,代码如下所示

pop_sud = df.query(
    "Country == 'Italy' & 
    Region.str.contains('Sicilia')"
)['Cases'].astype(int).tolist()

尝试按布尔索引筛选:

这篇文章用很好的例子详细地解释了这一点:

因此,如果您有此数据集:

nested_lists = [
    ['Country1', 'Region1', 'City1', 1, 5], 
    ['Country1', 'Region1', 'City2', 7, 8], 
    ['Country1', 'Region2', 'City3', 3, 4], 
    ['Country2', 'Region2', 'City4', 6, 8]
] 

df = pandas.DataFrame(nested_lists, columns = ['Country', 'Region', 'City', 'Population', 'Cases'])
您可以通过以下方式按国家和地区进行筛选:

df_filtered = df[(df['Country'] == 'Country1') & (df['Region'] == 'Region1')]
结果:

Country     Region  City    Population  Cases
Country1    Region1 City1   1           5
Country1    Region1 City2   7           8
Cases
5
8
要仅获取“案例”列,请执行以下操作:

df_filtered2 = df[(df['Country'] == 'Country1') & (df['Region'] == 'Region1')][['Cases']]
结果:

Country     Region  City    Population  Cases
Country1    Region1 City1   1           5
Country1    Region1 City2   7           8
Cases
5
8

尝试按布尔索引筛选:

这篇文章用很好的例子详细地解释了这一点:

因此,如果您有此数据集:

nested_lists = [
    ['Country1', 'Region1', 'City1', 1, 5], 
    ['Country1', 'Region1', 'City2', 7, 8], 
    ['Country1', 'Region2', 'City3', 3, 4], 
    ['Country2', 'Region2', 'City4', 6, 8]
] 

df = pandas.DataFrame(nested_lists, columns = ['Country', 'Region', 'City', 'Population', 'Cases'])
您可以通过以下方式按国家和地区进行筛选:

df_filtered = df[(df['Country'] == 'Country1') & (df['Region'] == 'Region1')]
结果:

Country     Region  City    Population  Cases
Country1    Region1 City1   1           5
Country1    Region1 City2   7           8
Cases
5
8
要仅获取“案例”列,请执行以下操作:

df_filtered2 = df[(df['Country'] == 'Country1') & (df['Region'] == 'Region1')][['Cases']]
结果:

Country     Region  City    Population  Cases
Country1    Region1 City1   1           5
Country1    Region1 City2   7           8
Cases
5
8

看看这个问题的最上面的答案:,我想这对你会有帮助。我一眼就看不出是什么导致了错误,但这不是从数据帧中选择的好方法。您可以尝试使用df[df.Country=='Italy'和df.Region=='Sicilia','Cases',并避免循环。对于调试,我建议键入df.Region=='Sicilia'并查看结果。它应该是一个布尔级数,只有一个为真,其余为假。请看一下这个问题的最上面的答案:,我认为这会对您有所帮助。我乍一看不出是什么导致了错误,但这不是从数据帧中选择的好方法。您可以尝试使用df[df.Country=='Italy'和df.Region=='Sicilia','Cases',并避免循环。对于调试,我建议键入df.Region=='Sicilia'并查看结果。它应该是一个布尔级数,只有一个为真,其余为假。