【问题标题】:Converting a datetime column to a string column将日期时间列转换为字符串列
【发布时间】:2015-04-25 23:18:55
【问题描述】:

我正在尝试将日期时间列转换回 Pandas 数据框中的字符串。

我目前的语法是:

all_data['Order Day new'] = dt.date.strftime(all_data['Order Day new'], '%d/%m/%Y')

但这会返回错误:

描述符“strftime”需要一个“datetime.date”对象,但收到一个“系列”。

谁能告诉我哪里出错了。

【问题讨论】:

    标签: python string datetime pandas


    【解决方案1】:

    如果您使用的是0.17.0 或更高版本,则可以使用矢量化的.dt.strftime 调用它:

    all_data['Order Day new'] = all_data['Order Day new'].dt.strftime('%Y-%m-%d')
    

    ** 如果您的 pandas 版本早于 0.17.0,那么您必须调用 apply 并将数据传递给 strftime

    In [111]:
    
    all_data = pd.DataFrame({'Order Day new':[dt.datetime(2014,5,9), dt.datetime(2012,6,19)]})
    print(all_data)
    all_data.info()
      Order Day new
    0    2014-05-09
    1    2012-06-19
    <class 'pandas.core.frame.DataFrame'>
    Int64Index: 2 entries, 0 to 1
    Data columns (total 1 columns):
    Order Day new    2 non-null datetime64[ns]
    dtypes: datetime64[ns](1)
    memory usage: 32.0 bytes
    
    In [108]:
    
    all_data['Order Day new'] = all_data['Order Day new'].apply(lambda x: dt.datetime.strftime(x, '%Y-%m-%d'))
    all_data
    Out[108]:
      Order Day new
    0    2014-05-09
    1    2012-06-19
    In [109]:
    
    all_data.info()
    <class 'pandas.core.frame.DataFrame'>
    Int64Index: 2 entries, 0 to 1
    Data columns (total 1 columns):
    Order Day new    2 non-null object
    dtypes: object(1)
    memory usage: 32.0+ bytes
    

    您不能在该列上调用 strftime,因为它不将 Series 理解为参数,因此会出现错误

    【讨论】:

    • 在 pandas 1.0.5 这会产生一个 SettingWithCopyWarning
    【解决方案2】:
    all_data['Order Day new']=all_data['Order Day new'].astype(str)
    

    我认为这更简单,如果日期已经是你想要的字符串格式。

    【讨论】:

    • 请在您的答案中添加一些解释,以便其他人学习
    • @NicoHaase 我觉得没什么好解释的,只是使用 .astype 方法
    • 好吧,然后解释一下你为什么要使用它。接受的答案(即:解决 OP 问题的答案)不使用它,然后您应该解释是什么让您的解决方案更好
    • @NicoHaase 好的,补充说它更简单
    • 认为是这样还是那样?它是否返回与strftime('%Y-%m-%d') 相同的值?
    【解决方案3】:

    要将所有日期时间列转换为字符串,请使用以下代码。

    for x in  df.select_dtypes(include=['datetime64']).columns.tolist():
        df[x] = df[x].astype(str)
    

    date_columns = df.select_dtypes(include=['datetime64']).columns.tolist()
    df[date_columns] = df[date_columns].astype(str)
    

    【讨论】:

      【解决方案4】:

      就我而言,我有一个 pySpark 数据框。这就是我将时间戳类型的“天”转换为字符串的方式:

      import pyspark.sql.functions as F
      convertedDf = rawDf.withColumn('d2', F.date_format(rawDf['day'], 'yyyyMMdd'))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-08
        • 2023-04-08
        • 2020-12-07
        • 2017-07-25
        • 2015-09-17
        • 2022-09-23
        • 1970-01-01
        相关资源
        最近更新 更多