检查一列是否仅包含一个特定值而没有其他内容
Check if a column contains only one particular value and nothing else
我有一个类似下面但更大的数据框:
import pandas as pd
df = pd.DataFrame({'text': ['Can you open the door?', 'Open the window', 'Call the hair salon.'],'info': ['on', 'on', 'off']})
我想根据信息栏中的内容打印不同的值。例如:
if all values in 'info' == 'on':
print('all values are on')
elif all values in 'info' == 'off':
print('all values are off')
elif 'info' contains both ('on' and 'off'):
print('both values exist')
所以我做了以下事情:
if all(df['info'].unique() == ['on']):
print('all values are on')
elif all(df['info'].unique() == ['off']):
print('all values are off')
elif all(df['info'].unique() == ['off','on']):
print('both values exist')
但我没有得到任何输出,我需要一个一致的解决方案,所以如果与我给出的示例不同,所有值实际上只是 'on' 或 'off',我仍然会得到正确的输出。
使用 set
s 比较值,优点是顺序不重要,相同的集合是 set(['off','on']) == set(['on','off'])
:
s = set(df['info'])
if s == set(['on']):
print('all values are on')
elif (s == set(['off'])):
print('all values are off')
elif (s == set(['off','on'])):
print('both values exist')
一般解决方案:
s = set(df['info'])
if len(s) == 1:
print(f'all values are {list(s)[0]}')
else:
print(f'multiple values exist - {", ".join(s)}')
要检查所有值是否都“打开”,您可以使用:
df['info'].eq('on').all()
# False
您还可以使用:
out = df['info'].unique()
if len(out)>1:
print('both values exist')
else:
print(f'all values are {out[0]}')
全开输出:
all values are on
我有一个类似下面但更大的数据框:
import pandas as pd
df = pd.DataFrame({'text': ['Can you open the door?', 'Open the window', 'Call the hair salon.'],'info': ['on', 'on', 'off']})
我想根据信息栏中的内容打印不同的值。例如:
if all values in 'info' == 'on':
print('all values are on')
elif all values in 'info' == 'off':
print('all values are off')
elif 'info' contains both ('on' and 'off'):
print('both values exist')
所以我做了以下事情:
if all(df['info'].unique() == ['on']):
print('all values are on')
elif all(df['info'].unique() == ['off']):
print('all values are off')
elif all(df['info'].unique() == ['off','on']):
print('both values exist')
但我没有得到任何输出,我需要一个一致的解决方案,所以如果与我给出的示例不同,所有值实际上只是 'on' 或 'off',我仍然会得到正确的输出。
使用 set
s 比较值,优点是顺序不重要,相同的集合是 set(['off','on']) == set(['on','off'])
:
s = set(df['info'])
if s == set(['on']):
print('all values are on')
elif (s == set(['off'])):
print('all values are off')
elif (s == set(['off','on'])):
print('both values exist')
一般解决方案:
s = set(df['info'])
if len(s) == 1:
print(f'all values are {list(s)[0]}')
else:
print(f'multiple values exist - {", ".join(s)}')
要检查所有值是否都“打开”,您可以使用:
df['info'].eq('on').all()
# False
您还可以使用:
out = df['info'].unique()
if len(out)>1:
print('both values exist')
else:
print(f'all values are {out[0]}')
全开输出:
all values are on