首页 > 解决方案 > 如何使用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)

它返回

          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

现在,如果我对 Score1 和 Score2 都有值,我想添加另一列来判断“通过”,当一个为空白时判断“失败”。

我认为波纹管做的工作,但没有。

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' 和 ' ' 都必须返回失败。

标签: pythondataframeconditional-statementswhere-clausewhitespace

解决方案


将它们转换为字符串,astype(str)然后使用.str.fullmatch正则表达式\s*检查条目是否为空(空格)或充满空格,''例如' '

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')

推荐阅读