【问题标题】:strptime() argument 1 must be str, not Series time series convertstrptime() 参数 1 必须是 str,而不是 Series 时间序列转换
【发布时间】:2018-10-11 02:10:52
【问题描述】:

我使用 datetime 从 json 读取时间, 单次代码运行良好,

 import datetime
 data=datetime.datetime.strptime('Apr 12, 2018', '%b %d, Y').strftime('%m/%d/%Y')

但是,当我尝试将其应用到数据框中时,出现错误。

 df_newtime=datetime.datetime.strptime(old_df['oldDate'],'%b %d, %Y').strftime('%m/%d/%Y')

错误是TypeError: strptime() argument 1 must be str, not Series

【问题讨论】:

  • old_df['oldDate'] 是数据框的一列。你需要循环它,你不能直接将它传递给非 Pandas 函数。

标签: python pandas datetime


【解决方案1】:

old_df['oldDate'] 将返回包含日期的列,这是一个系列。

您可以通过使用 pandas 中的 .apply 函数将函数应用于数据帧的每一行来解决此问题。见here

def date_convert(date_to_convert):
     return datetime.datetime.strptime(date_to_convert, '%b %d, 
     %Y').strftime('%m/%d/%Y')

new_df['new_date'] = old_df['oldDate'].apply(date_convert)

【讨论】:

    【解决方案2】:

    您可以通过两种方式做到这一点:

    方法一:

    这里我们使用map向函数传递一个字符串

    list(map(lambda x: datetime.datetime.strptime(x,'%b %d, %Y').strftime('%m/%d/%Y'), old_df['oldDate']))
    

    方法二:

    这里我们传递一个系列

    pd.to_datetime(old_df['oldDate'], format='%b %d, %Y')
    

    【讨论】:

      猜你喜欢
      • 2020-07-11
      • 1970-01-01
      • 2018-09-04
      • 2022-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-14
      相关资源
      最近更新 更多