使用函数调用在pandas数据框中填充列

时间:2018-10-01 11:54:50

标签: python pandas

如何将.loc.str.match()一起使用,以通过函数调用来更新列值?我正在尝试的代码就像;

df.loc[df['Col1'].str.match(r'\d\d/\d\d/\d\d\d\d', na=False), 'Col2'] = _my_func(df['Col1'])

一个简单的正则表达式模式来查找日期格式,然后是_myfunc();

def _my_func(data)
    for row in data.iteritems():
        day = int(row[1][:2])
        month = int(row[1][3:5])
        year = int(row[1][6:])
        fecha = datetime.datetime(year, month, day, 0, 0, 0)
        diff =  fecha - datetime.datetime.now()
        if diff.days > 0:
            return 'Yes'
        elif diff.days < 0:
            return 'No'

这是将值从函数返回到数据框的正确方法吗?

如果我将print('test')插入_my_func之前的return中,它只会打印一次test,而不是打印数据中的每一行传递给函数,有人知道为什么吗?谢谢。

2 个答案:

答案 0 :(得分:1)

我的评论如下:

def _my_func(x):
    day = int(x[:2])
    month = int(x[3:5])
    year = int(x[6:])
    fecha = datetime.datetime(year, month, day, 0, 0, 0)
    diff = fecha - datetime.datetime.now()
    if diff.days > 0:
        return 'Yes'
    elif diff.days < 0:
        return 'No'

其次:

df.loc[df['Col1'].str.match(r'\d\d/\d\d/\d\d\d\d', na=False), 'Col2'] = df['Col1'].apply(_my_func)

答案 1 :(得分:1)

您可以使用apply()函数进行尝试。

例如:

df['loc1'] = df['loc1'].apply(_my_func)

然后它将获取数据帧的每一行,并将其作为输入传递给函数_my_func