Python 使用函数调用填充dataframe中的列
如何将Python 使用函数调用填充dataframe中的列,python,pandas,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']) 一个简单的正则表达式模式,用于查找日期格式,然后\u myfunc() def\u my\u func(数据) 对于data.iteritems()中的行: day=int(第[1][:2]行) 月份=整数(第
.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'])
一个简单的正则表达式模式,用于查找日期格式,然后\u myfunc()
def\u my\u func(数据)
对于data.iteritems()中的行:
day=int(第[1][:2]行)
月份=整数(第[1][3:5]行)
年份=整数(第[1][6]行)
fecha=datetime.datetime(年、月、日、0、0)
diff=fecha-datetime.datetime.now()
如果差异天数>0:
返回“是”
elif差异天数<0:
返回“否”
这是将值从函数返回到数据帧的正确方法吗
另外,如果我在return
之前将print('test')
插入\u my_func
,它只打印test
一次,而不是打印传递给函数的数据中的每一行,有人知道为什么吗?谢谢。以下是我的评论:
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'
您可以使用
apply()
函数进行尝试
例如:
df['loc1']=df['loc1']。应用(\u my\u func)
然后它将获取数据帧的每一行,并将其作为输入传递给函数
\u my_func
您是否查看了pandas.dataframe.apply
?您的函数接受一个pd.Series
,但只返回一个yes或no答案。这就是为什么打印测试只发生一次。为了使用此方法(即,不使用df['Col1'].apply(_my_func)
)进行此操作,您需要将所有“是”和“否”结果保存到一个iterable(列表或pd.Series)中,这正是我所需要的,我编辑了您答案中的第一个索引,因为在进行应用更改后不需要它,谢谢!
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)