Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检查列内的字符串错误行为-熊猫_Python_Pandas_Dataframe - Fatal编程技术网

Python 检查列内的字符串错误行为-熊猫

Python 检查列内的字符串错误行为-熊猫,python,pandas,dataframe,Python,Pandas,Dataframe,我有以下数据帧: import pandas as pd df = pd.DataFrame ({ 'Name':['Unable host=test1, status=c0000192','Unable host=test2, status=22228001','Unable host=test3, status=c000018d'], 'Error':['NaN','NaN','NaN'] }) print(df)

我有以下数据帧:

import pandas as pd 

df = pd.DataFrame ({
    'Name':['Unable host=test1, status=c0000192','Unable host=test2, status=22228001','Unable host=test3, status=c000018d'],
    'Error':['NaN','NaN','NaN']
    })


print(df)
                                   Name Error
0  Unable host=test1, status=c0000192   NaN
1  Unable host=test2, status=22228001   NaN
2  Unable host=test3, status=c000018d   NaN
代码应遵循以下if语句:

import pandas as pd 

df = pd.DataFrame ({
    'Name':['Unable host=test1, status=c0000192','Unable host=test2, status=22228001','Unable host=test3, status=c000018d'],
    'Error':['NaN','NaN','NaN']
    })

if df['Name'].str.contains('status=c000018d').any():
    df['Error'] = 'Trust Failure'

elif df['Name'].str.contains('status=22228001').any():
    df['Error'] = 'No creds'

else:
    df['Error'] = 'Other'

print(df)
输出应为:

                                   Name          Error
0  Unable host=test1, status=c0000192  Other
1  Unable host=test2, status=22228001  No creds
2  Unable host=test3, status=c000018d  Trust Failure
相反,我得到:

                                   Name          Error
0  Unable host=test1, status=c0000192  Trust Failure
1  Unable host=test2, status=22228001  Trust Failure
2  Unable host=test3, status=c000018d  Trust Failure

为什么会这样?就像第一个if语句匹配所有内容一样。

我认为您在这里混合了内容,请尝试以下方法:

df.loc[df['Name'].str.contains('status=c000018d'), 'Error'] = 'Trust Failure'
df.loc[df['Name'].str.contains('status=22228001'), 'Error'] = 'No creds'
df.loc[df['Name'] == 'NaN', 'Error'] = 'Other'
您正在执行的操作在第一条if语句中返回true,并用“信任失败”填充所有值。

适合此问题,这是一种针对多条件列的向量化方法:

conditions = [df['Name'].str.contains('status=c000018d'), 
              df['Name'].str.contains('status=22228001')]
df['Error'] = np.select(conditions, choices=['Trust Failure', 'No creds'], default='Other')

                                 Name          Error
0  Unable host=test1, status=c0000192          Other
1  Unable host=test2, status=22228001       No creds
2  Unable host=test3, status=c000018d  Trust Failure

您的问题是如何使用
any()
它正在按预期工作。非常感谢!很好的解决方案,我不知道np.select是否适合这种情况