Python 将df.apply()与datetime.strtime一起使用的语法

Python 将df.apply()与datetime.strtime一起使用的语法,python,pandas,datetime,Python,Pandas,Datetime,考虑下表“df”: date sales 0 2021-04-10 483 1 2022-02-03 226 2 2021-09-23 374 3 2021-10-17 186 4 2021-07-17 35 我想使用apply()和datetime.strtime()将当前为字符串的列日期转换为日期 我尝试了以下方法: format_date = "%Y-%m-%d" df["date_new"] = df.loc[:

考虑下表“df”:

    date        sales  
0   2021-04-10  483  
1   2022-02-03  226  
2   2021-09-23  374  
3   2021-10-17  186  
4   2021-07-17   35
我想使用
apply()
datetime.strtime()
将当前为字符串的列日期转换为日期

我尝试了以下方法:

format_date = "%Y-%m-%d"
df["date_new"] = df.loc[:,"date"].apply(datetime.strptime,df.loc[:,"date"],format_date)
我有以下错误

级数的真值是模糊的。使用a.empty,a.bool(), a、 item()、a.any()或a.all()

我尝试使用不同的语法(使用
args
**kwds
apply()
参数,但我总是得到一个错误) 例如:

apply()只接受2个参数(给定3个)

有人能帮我解释一下语法吗?谢谢。

您可以这样做:

df['date\u new']=df['date'].map(lambda日期字符串:datetime.strtime(日期字符串,格式字符串))

由于您仅在上操作,并且需要来自单个列的数据,因此应使用
.map
而不是
.apply
,这将立即提供整行/整列数据

如果必须使用“应用”:

df['date\u new']=df.apply(lambda行:datetime.strtime(行['date'],格式字符串),axis=1)

这里的键是axis=1,因此您可以按行进行操作,您可以执行以下操作:

df['date\u new']=df['date'].map(lambda日期字符串:datetime.strtime(日期字符串,格式字符串))

由于您仅在上操作,并且需要来自单个列的数据,因此应使用
.map
而不是
.apply
,这将立即提供整行/整列数据

如果必须使用“应用”:

df['date\u new']=df.apply(lambda行:datetime.strtime(行['date'],格式字符串),axis=1)


这里的键是
axis=1
,因此您可以按行操作您应该使用
pd.to_datetime()


您应该使用
pd.to\u datetime()



如果您需要将字符串date转换为datetime,那么只需要df['date']=pd。要转换为datetime(df['date']),为什么要寻找简单的解决方案呢。。。非常感谢你!不过,您是否看到了将apply()和datetime.strtime()结合起来的方法?我仍然很想知道为什么它不起作用。@tusalue请看下面我关于您的问题的答案question@Tousalouest,为了使用strtime学习语法,您可以尝试df['date'].apply(lambda行:datetime.strtime(row,format_date))。虽然您也应该使用to_datetime,但不要认为这是重复的。OP特别询问“使用df.apply()和datetime.strtime的语法”,而不是“如何转换为日期格式”。这也适用于建议使用pd.to_datetime的答案。如果您需要将字符串date转换为datetime,您只需要df['date']=pd。to_datetime(df['date'])为什么要在困难重重的情况下寻找简单的解决方案。。。非常感谢你!不过,您是否看到了将apply()和datetime.strtime()结合起来的方法?我仍然很想知道为什么它不起作用。@tusalue请看下面我关于您的问题的答案question@Tousalouest,为了使用strtime学习语法,您可以尝试df['date'].apply(lambda行:datetime.strtime(row,format_date))。虽然您也应该使用to_datetime,但不要认为这是重复的。OP特别询问“使用df.apply()和datetime.strtime的语法”,而不是“如何转换为日期格式”。这也适用于建议使用pd.to_datetime的答案。不,你不应该。您应该使用
to_datetime
pandas方法。使用applymap不会更好,因为我在数据帧而不是序列中工作?@roganjosh同意,但是Tousalouest在评论中询问如何使用datetime.strpimeter实现函数
apply
applymap
作为python代码执行,因为您运行的是一个变量函数。其他内置的panda都是用C编写的,因此速度更快。您应该尽可能多地使用pandas内置(任何spark…scikit…numpy…等都是如此)来提高性能。:)@在应用程序中,applymap对数据帧中的每个元素进行操作,而apply沿着一个轴进行操作。您只希望使用1列中的信息,因此可以将其设置为一个系列(
df['data'].map
),应用于每一行(my
apply
示例),或假设数据帧的applymap(必须是
df['date'].applymap
)不,您不应该这样做。您应该使用
to_datetime
pandas方法。使用applymap不会更好,因为我在数据帧而不是序列中工作?@roganjosh同意,但是Tousalouest在评论中询问如何使用datetime.strpimeter实现函数
apply
applymap
作为python代码执行,因为您运行的是一个变量函数。其他内置的panda都是用C编写的,因此速度更快。您应该尽可能多地使用pandas内置(任何spark…scikit…numpy…等都是如此)来提高性能。:)@在应用程序中,applymap对数据帧中的每个元素进行操作,而apply沿着一个轴进行操作。您只想使用1列中的信息,因此可以将其设置为一个系列(
df['data'].map
),应用于每一行(my
apply
示例),或假设数据帧的applymap(必须是
df['date'].applymap
df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d')