如何将.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
,而不是打印数据中的每一行传递给函数,有人知道为什么吗?谢谢。
答案 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
。