我试图做的是让用户输入一组用空格分隔的值,读取它们,与数据框进行正确的比较,并相应地打印文本。看起来很简单的任务,却经过了数小时的努力。奇怪的是:
- else语句本身工作正常,但其格式与if语句不同
1.如果语句格式似乎正确,但它不正确工作。无论我输入什么,它总是打印出“所有数字都在数据框中”。
1.永远无法识别elif语句
我将input str转换为list,可以在代码示例中看到。这显然与数据类型无关。任何帮助将非常感谢!
import pandas as pd
in1 = input("Choose certain numbers separated with spaces:")
in1 = in1.strip()
result = pd.DataFrame([1, 1, 1, 2, 3, 3, 4, 5], columns=['Numbers'])
uniq_numbers = list(result.Numbers.unique())
print(type(in1))
in1 = in1.split()
for i in range(len(in1)):
in1[i] = int(in1[i])
print(type(in1))
if all(result[(result['Numbers'].isin([in1]))]):
print('All numbers', in1, ' are in dataframe:', uniq_numbers)
elif not all(result['Numbers'].isin(in1)):
print('No numbers', in1, ' were found in dataframe!', uniq_numbers)
else:
print('Some of the numbers entered:', in1, 'are NOT in dataframe, be aware. \n',
'Valid number/s:',
set(in1).intersection(result),
'\n Number/s that were NOT found in dataframe:',
(set(in1) - set(result))
)
输入:6 7输出:所有数字都在dataframe ['6',' ','7']中
2条答案
按热度按时间aiazj4mn1#
有两个主要问题。您不是在测试列表中的所有数字是否都在数据框中,而是在测试数据框中的所有数字是否都在列表中。
if
语句的问题在于,作为all
函数的参数,您使用的不是bool
s的可迭代对象,而是一个对象,在本例中是 Dataframe 。要测试列表中的所有数字是否都在数据框中,可以使用
numpy
:要知道列表中的哪些数字出现在数据框中,可以使用
mask
变量。如果mask[i]
为True
,则 Dataframe 中存在编号numbers[i]
。如果你把数字转换成numpy
数组,你可以简单地得到所有当前的数字这是可能的,因为您可以使用
bool
s索引numpy
数组。holgip5t2#
请尝试以下操作:我想这会解决你的问题:
在这个修正的代码中,我们将
in1
和uniq_numbers
转换为集合,并使用issubset
方法检查in1
中的所有数字是否都在DataFrame中。我们还使用intersection
方法来检查in1
中的任何数字是否在DataFrame中。