Python 为什么两个数相除时得到0?
我试图找到陆地面积与水域面积的比率,但当我尝试将这两个数字除以时,我得到了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
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
添加到文件的顶部,或者将列设置为floatarea\u water.your\u column=area\u water.your\u column.astype(float)
,如注释中所述,Python3将从_ufuture _uu导入除法
执行,因此在除法两个整数时不应得到零。如果是python 2,您可以将从uuu future\uuuuu导入除法添加到文件顶部,或者将列设置为floatarea\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)
。2int
的除法为您提供了Python 2中的另一个int
。面积的值是多少?iloc[0]
和面积的值是多少。iloc[0]
?@Macin我在我的问题中添加了输出:您使用Python 2还是Python 3?使用float(num1)/float(num2)
或float(num1)/num2
或num1/float(num2)
。在Python 2中,2int
的除法为您提供了另一个int
。area\u land.iloc[0]
和area\u water.iloc[0]
的值是多少?@Macin我在我的问题中添加了输出