Python numpy函数的行为

2024-06-01 09:01:24 发布

您现在位置:Python中文网/ 问答频道 /正文

有一个关于使用numpy的where条件的问题。我可以使用带有==运算符的where条件,但不能使用带有“一个字符串是另一个字符串的子字符串吗?”你知道吗

代码:

    import pandas as pd
    import datetime as dt
    import numpy as np

    data = {'name': ['Smith, Jason', 'Bush, Molly', 'Smith, Tina',    
        'Clinton,     Jake', 'Hamilton, Amy'],
        'age': [42, 52, 36, 24, 73],
        'preTestScore': [4, 24, 31, 2, 3],
        'postTestScore': [25, 94, 57, 62, 70]}
    df = pd.DataFrame(data, columns = ['name', 'age', 'preTestScore',     
    'postTestScore'])
    print "BEFORE---- "
    print df
    print "AFTER----- "
    df["Smith Family"]=np.where("Smith" in df['name'],'Y','N' )
    print df

输出:

    BEFORE-----

                name  age  preTestScore  postTestScore
    0   Smith, Jason   42             4             25
    1    Bush, Molly   52            24             94
    2    Smith, Tina   36            31             57
    3  Clinton, Jake   24             2             62
    4  Hamilton, Amy   73             3             70


    AFTER----- 
                name  age  preTestScore  postTestScore Smith Family
    0   Smith, Jason   42             4             25            N
    1    Bush, Molly   52            24             94            N
    2    Smith, Tina   36            31             57            N
    3  Clinton, Jake   24             2             62            N
    4  Hamilton, Amy   73             3             70            N

为什么努比。哪里在上述情况下,条件不起作用。 本以为史密斯一家有价值观 是的 不 是的 不 不

但没有得到这个结果。如上所示的输出都是N,N,N,N,N 而不是在df['name']中使用条件“Smith”(也尝试了str(df['name'])。find(“Smith”)>;-1),但这也不起作用。你知道吗

你知道哪里不对,或者我能做些什么不同的事吗?你知道吗


Tags: 字符串nameimportdfageaswhere条件
2条回答

我认为布尔掩码需要^{}

print (df['name'].str.contains("Smith"))
0     True
1    False
2     True
3    False
4    False
Name: name, dtype: bool

df["Smith Family"]=np.where(df['name'].str.contains("Smith"),'Y','N' )
print (df)
                name  age  preTestScore  postTestScore Smith Family
0       Smith, Jason   42             4             25            Y
1        Bush, Molly   52            24             94            N
2        Smith, Tina   36            31             57            Y
3  Clinton,     Jake   24             2             62            N
4      Hamilton, Amy   73             3             70            N

^{}

df["Smith Family"]=np.where(df['name'].str.startswith("Smith"),'Y','N' )
print (df)
                name  age  preTestScore  postTestScore Smith Family
0       Smith, Jason   42             4             25            Y
1        Bush, Molly   52            24             94            N
2        Smith, Tina   36            31             57            Y
3  Clinton,     Jake   24             2             62            N
4      Hamilton, Amy   73             3             70            N

如果要使用in处理标量,则需要apply

此解决方案速度更快,但如果列name中的NaN不起作用。

df["Smith Family"]=np.where(df['name'].apply(lambda x: "Smith" in x),'Y','N' )
print (df)
                name  age  preTestScore  postTestScore Smith Family
0       Smith, Jason   42             4             25            Y
1        Bush, Molly   52            24             94            N
2        Smith, Tina   36            31             57            Y
3  Clinton,     Jake   24             2             62            N
4      Hamilton, Amy   73             3             70            N

np.where("Smith" in df['name'],'Y','N' )的行为取决于df['name']产生什么-我假设是某种numpy数组。其余的是numpy

In [733]: x=np.array(['one','two','three'])
In [734]: 'th' in x
Out[734]: False
In [744]: 'two' in np.array(['one','two','three'])
Out[744]: True

in是一个完整的字符串测试,包括一个列表和一个字符串数组。这不是子串测试。你知道吗

np.char有一堆函数将字符串函数应用于数组的元素。它们大致相当于np.array([x.fn() for x in arr])。你知道吗

In [754]: x=np.array(['one','two','three'])
In [755]: np.char.startswith(x,'t')
Out[755]: array([False,  True,  True], dtype=bool)
In [756]: np.where(np.char.startswith(x,'t'),'Y','N')
Out[756]: 
array(['N', 'Y', 'Y'], 
      dtype='<U1')

或使用find

In [760]: np.char.find(x,'wo')
Out[760]: array([-1,  1, -1])

pandas.str方法似乎做了类似的事情;将字符串方法应用于数据系列的元素。你知道吗

相关问题 更多 >