如何使用 python 在数据框中查找带有空格的行?

how to find rows with white spaces in a dataframe, using python?

我有以下数据框。

import pandas as pd
import numpy as np

#Create a DataFrame

df1 = {
    'State':[' Arizona AZ ',' Georgia GG ', ' Newyork NY','Indiana IN ','Florida FL '],
   'Score1':[62,47,55,74,31],
   'Score2':[332,'',35,73,61]}
df1 = pd.DataFrame(df1,columns=['State','Score1','Score2'])

print(df1)

它returns

          State  Score1 Score2
0   Arizona AZ       62     62
1   Georgia GG       47       
2    Newyork NY      55     35
3   Indiana IN       74     73
4   Florida FL       31     61

现在我想增加一列来判断'pass'如果我对Score1和Score2都有值,而'fail'当一个为空时

我以为波纹管可以工作但没有。

df1['pass/fail'] = np.where((df1['Score1'].isspace()) | (df1['Score2'].isspace()) , 'fail',' ') 

如何添加一列以查明我是否有两列的数据?

编辑:我的数据集实际上是这样的

import pandas as pd
import numpy as np

#Create a DataFrame

df1 = {
    'State':[' Arizona AZ ',' Georgia GG ', ' Newyork NY','Indiana IN ','Florida FL '],
   'Score1':[62,47,55,nan,31],
   'Score2':[332,'',35,73,61]}
df1 = pd.DataFrame(df1,columns=['State','Score1','Score2'])

print(df1)

'nan' 和“ ”都必须 return 失败。

通过 astype(str) 将它们转换为字符串,然后使用 .str.fullmatch 和正则表达式 \s* 检查条目是空的(空白 space)还是充满 spaces 例如''' ' 等:

df1['pass/fail'] = np.where(
                        (df1['Score1'].astype(str).str.fullmatch(r"\s*") |
                         df1['Score2'].astype(str).str.fullmatch(r"\s*")),
                        'fail',
                        'pass')

获得

          State  Score1 Score2 pass/fail
0   Arizona AZ       62    332      pass
1   Georgia GG       47             fail
2    Newyork NY      55     35      pass
3   Indiana IN       74     73      pass
4   Florida FL       31     61      pass

如果你想避免重复,你可以将掩码包装在一个函数中:

def is_blank_mask(df, column):
    return df[column].astype(str).str.fullmatch(r"\s*")

然后

df1['pass/fail'] = np.where(is_blank_mask(df1, 'Score1') |  is_blank_mask(df1, 'Score2'),
                            'fail',
                            'pass')