为什么申请不适用

时间:2016-08-21 14:54:22

标签: python pandas

我有这个初始数据框:

df = pd.DataFrame(data = {'colX': ['TQ95','SM90','SJ07','SH97','TF28']})

所以df如下:

    colX
0   TQ95
1   SM90
2   SJ07
3   SH97
4   TF28

不,我创建了一个非常简单的函数并将其应用于df:

def foo(x):
    return x + 'bar'

df.apply(foo) 

返回:

    colX
0   TQ95bar
1   SM90bar
2   SJ07bar
3   SH97bar
4   TF28bar

那么为什么会这样:

def bar(x):
    if len(x) == 4:
        return 'x'
    elif len(x) == 6:
        return 'y'
    else:
        return 'z'

df.apply(bar)

归还这个?:

colX    z
dtype: object

而不是这个?:

    colX
0   x
1   x
2   x
3   x
4   x

2 个答案:

答案 0 :(得分:3)

你的意思是:

df['colX'].apply(bar)

因此,仅检查列值的长度 完整的代码:

import pandas as pd
def bar(x):
    if len(x) == 4:
        return 'x'
    elif len(x) == 6:
        return 'y'
    else:
        return 'z'

df = pd.DataFrame(data = {'colX': ['TQ95','SM90','SJ07','SH97','TF28']})
df['colX'] = df['colX'].apply(bar)

答案 1 :(得分:2)

p = subprocess.Popen(command, stderr=subprocess.PIPE) err = p.communicate()[1] 在DataFrame的每一列上执行(对于您的情况,仅在p.communicate()[0]上)。它与None相同。您将'bar'附加到该系列中的每个字符串(df.apply(foo),该函数是系列,因此colX也是系列)。

df['colX'] + 'bar'也在该单个列上执行。它返回标量而不是系列。如果您希望将其应用于每一行,则需要传递x

x + 'bar'