我正在尝试获取两个print("Welcome to the math quiz game!")
for i in range(0,10):
operators = ['+','-','*','/']
import random
num1 = random.randint(1,10)
num2 = random.randint(1,10)
randop = random.choice(operators)
question = input("What is %d %s %d: " % (num1,randop,num2))
if randop == "+":
answer = num1 + num2
elif randop == "-":
answer = num1 - num2
elif randop == "*":
answer = num1 * num2
elif randop == "/":
answer = num1 / num2
if question == answer:
print("\nCorrect")
elif question != answer:
print("Incorrect or Invalid")
pandas
之间的最小值。碰巧该系列中的某些元素是Series
,当我将其与数字进行比较时,我想得到结果NaN
。
NaN
函数我使用了np.min
函数。这是因为我知道使用np.min
函数会导致错误,因为列表中存在min
元素时,输出取决于列表中的顺序。
当我跑步时:
NaN
我得到的结果是:
import numpy as np
print min([1,np.nan])
print min([np.nan,1])
当我跑步时:
>>>
1
nan
我得到了我期望的结果:
import numpy as np
print np.min([np.nan,1])
print np.min([1,np.nan])
>>>
nan
nan
系列之间寻找最小值的玩具示例代码考虑到以前的结果,我使用了pandas
函数。但是,如果我用两个np.min
跟随玩具示例代码,创建一个Series
并找到最小值,那么我得到的是数字而不是DataFrame
,正如我在NaN
和数字进行比较。
NaN
这将导致以下打印结果:
import pandas as pd
import numpy as np
s1 = pd.Series([1,2,3,4,5])
s2 = pd.Series([np.nan, np.nan, np.nan, 0, np.nan])
df1 = pd.DataFrame([s1,s2])
df2 = pd.DataFrame([s2,s1])
r1 = np.min(df1,axis=0)
r2 = np.min(df2,axis=0)
print r1
print r2
但是我希望结果与>>>
0 1.0
1 2.0
2 3.0
3 0.0
4 5.0
dtype: float64
0 1.0
1 2.0
2 3.0
3 0.0
4 5.0
dtype: float64
Serie
相同,即s2
DataFrame
:
df1
为两个系列创建的>>> df1
0 1 2 3 4
0 1.0 2.0 3.0 4.0 5.0
1 NaN NaN NaN 0.0 NaN
的最小值时,我是否缺少某个函数或者做错了什么?我希望DataFrame
是数字和NaN
元素进行比较时的结果...
注意:我将NaN
和python 2.7
和numpy 1.13.3
一起使用
答案 0 :(得分:3)
IIUC,您可以将系列的values
作为np.min
传递到np.array
,并且您会从np.min
获得预期的行为:
>>> np.min(df2.values,axis=0)
array([nan, nan, nan, 0., nan])
>>> np.min(df1.values,axis=0)
array([nan, nan, nan, 0., nan])
您还可以将参数skipna=False
应用于pands.DataFrame.min
,以同时考虑NaN
的值:
>>> df1.min(axis=0, skipna=False)
0 NaN
1 NaN
2 NaN
3 0.0
4 NaN
dtype: float64
>>> df2.min(axis=0, skipna=False)
0 NaN
1 NaN
2 NaN
3 0.0
4 NaN
dtype: float64
答案 1 :(得分:1)
IIUC,这是np.minimum
比较两个数组,并返回一个新的包含按元素排列的数组 极小值。 如果要比较的元素之一是NaN,则该元素 。如果两个元素均为NaN,则第一个为 返回。
r1 = np.minimum(df1.loc[0, :], df1.loc[1, :])
r2 = np.minimum(df2.loc[0,:], df2.loc[1, :])