Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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 为什么两个数相除时得到0?_Python_Sql_Sqlite_Pandas_Dataframe - Fatal编程技术网

Python 为什么两个数相除时得到0?

Python 为什么两个数相除时得到0?,python,sql,sqlite,pandas,dataframe,Python,Sql,Sqlite,Pandas,Dataframe,我试图找到陆地面积与水域面积的比率,但当我尝试将这两个数字除以时,我得到了0: import pandas as pd import sqlite3 import math conn = sqlite3.connect('factbook.db') query = "SELECT SUM(area_land ) from facts WHERE area_land != '';" query2 = "SELECT SUM(area_water) from facts WHERE area_wat

我试图找到陆地面积与水域面积的比率,但当我尝试将这两个数字除以时,我得到了0:

import pandas as pd
import sqlite3
import math
conn = sqlite3.connect('factbook.db')
query = "SELECT SUM(area_land ) from facts WHERE area_land != '';"
query2 = "SELECT SUM(area_water) from facts WHERE area_water != '';"
area_land= pd.read_sql_query(query,conn)
#print(area_land.iloc[0])
area_water= pd.read_sql_query(query2,conn)
ratio = area_land.iloc[0]/area_water.iloc[0]
print(ratio)
我是否必须将比率初始化为float类型

这是两个变量的输出:

SUM(area_land )    128584834                                                    
Name: 0, dtype: int64                                                           
SUM(area_water)    4633425                                                      
Name: 0, dtype: int64   

如注释中所述,python 3将从uuu future uuu导入除法执行
,因此在除法两个整数时不应得到零。如果是python 2,您可以将
从uuu future\uuuuu import division
添加到文件的顶部,或者将列设置为float
area\u water.your\u column=area\u water.your\u column.astype(float)
,如注释中所述,Python3将从_ufuture _uu导入除法
执行
,因此在除法两个整数时不应得到零。如果是python 2,您可以将
从uuu future\uuuuu导入除法添加到文件顶部,或者将列设置为float
area\u water.your\u column=area\u water.your\u column.astype(float)
您正在将一个整数除以另一个整数。当您这样做时,结果将作为整数传递。例如,1/2=0.5,但表示为整数的0.5是0


将分子或分母中的一个或两个转换为浮点数,以返回一个浮点数。

您正在将一个整数除以另一个整数。当您这样做时,结果将作为整数传递。例如,1/2=0.5,但表示为整数的0.5是0


将分子或分母中的一个或两个转换为浮点数,以返回浮点数。

如果已选择结果
进行除法,则应使用
.iloc[0,0]
选择实际值:

ratio = area_land.iloc[0,0] / area_water.iloc[0,0]

您已选择结果
进行除法,应使用
.iloc[0,0]
选择实际值:

ratio = area_land.iloc[0,0] / area_water.iloc[0,0]

我建议您使用更高效的SQL方法—您可以通过一条SQL语句实现您的目标:

import pandas as pd
import sqlite3

conn = sqlite3.connect(r'd:/temp/test.sqlite3')
query = "select sum(coalesce(area_land,0))*1. / sum(coalesce(area_water,0))*1. as ratio" + \
        " from facts where area_land is not null or area_water is not null"

ratio = pd.read_sql(query, conn).iloc[0, 0]

print('Ratio: {}'.format(ratio))
输出:

Ratio: 0.75
设置:

C:\sqlite3 d:\temp\test.sqlite3
create table facts(area_land int, area_water int);
insert into facts values (NULL, 10);
insert into facts values (10, NULL);
insert into facts values (5, 10);
.quit
数据:


我建议您使用更高效的SQL方法—您可以通过一条SQL语句实现您的目标:

import pandas as pd
import sqlite3

conn = sqlite3.connect(r'd:/temp/test.sqlite3')
query = "select sum(coalesce(area_land,0))*1. / sum(coalesce(area_water,0))*1. as ratio" + \
        " from facts where area_land is not null or area_water is not null"

ratio = pd.read_sql(query, conn).iloc[0, 0]

print('Ratio: {}'.format(ratio))
输出:

Ratio: 0.75
设置:

C:\sqlite3 d:\temp\test.sqlite3
create table facts(area_land int, area_water int);
insert into facts values (NULL, 10);
insert into facts values (10, NULL);
insert into facts values (5, 10);
.quit
数据:


您使用的是Python 2还是Python 3?请改用
float(num1)/float(num2)
float(num1)/num2
num1/float(num2)
。2
int
的除法为您提供了Python 2中的另一个
int
。面积的值是多少?iloc[0]
和面积的值是多少。iloc[0]
?@Macin我在我的问题中添加了输出:您使用Python 2还是Python 3?使用
float(num1)/float(num2)
float(num1)/num2
num1/float(num2)
。在Python 2中,2
int
的除法为您提供了另一个
int
area\u land.iloc[0]
area\u water.iloc[0]
的值是多少?@Macin我在我的问题中添加了输出