如何使用 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')
我有以下数据框。
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')