Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用函数调用填充dataframe中的列_Python_Pandas - Fatal编程技术网

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)