我有一个像这样的python pandas数据框:
data = ['13,12', '8, 7', '12,1', '7', '2,6']
index = 'a', 'b', 'c', 'd', 'e'
col = ['colnames']
df = pd.DataFrame(data, index=index, columns = col)
df
colnames
a 13,12
b 8, 7
c 12,1
d 7
e 2,6
我想看看'colnames'列中的数字是否在以下数字列表中:
7,8,9,10,12,13,15,23,24,25,26。
我尝试使用以下函数来检查这是否属实,如果是,它应该返回'good',否则,应该返回'poor':
def quality_check(qaulity):
for numbers in str(quality):
if numbers in [7, 8, 9, 10, 12, 13, 15, 23, 24, 25, 26]:
return "good"
else:
return "poor"
df['colnames'].map(quality_check)
预期结果是:
a good
b good
c poor
d good
e poor
然而,这就是我所得到的:
a poor
b poor
c poor
d poor
e poor
有谁知道如何做到这一点或更好的方法吗?我非常感谢任何帮助。 非常感谢。
答案 0 :(得分:1)
看起来你正在将字符串与整数进行比较,这些整数不会起作用:
>>> for n in '123':
... print n,
... if n in [1, 2, 3]:
... print 'yes'
... else:
... print 'no'
...
1 no
2 no
3 no
答案 1 :(得分:1)
我认为您需要这样的内容来检查所有数字,您的功能是没有检查所有数字并且正在将ints
与strings
进行比较:
def quality_check(q):
spl = q.split(",") # split to check both numbers
if all(x in ["7", "8", "9", "10", "12", "13", "15", "23", "24", "25", "26"]for x in spl):
return "good"
else:
return "poor"
输出:
a good
b good
c poor
d good
e poor
Name: colnames, dtype: object
只要all
遇到不在其中的元素,它就会返回False。
您还可以使用sets
来检查subsets
和map
元素ints
:
col = ['colnames']
def quality_check(q):
spl = map(int,q.split(",")) # make all ints and split into individual nums
if set(spl).issubset( [7, 8, 9, 10, 12, 13, 15, 23, 24, 25, 26]):
return "good"
else:
return "poor"
您也可以使用第一个示例的集合,元素不必是整数。