将日期时间列转换为字符串列

Posted

技术标签:

【中文标题】将日期时间列转换为字符串列【英文标题】: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”对象,但收到一个“系列”。

谁能告诉我哪里出错了。

【问题讨论】:

【参考方案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'))

【讨论】:

以上是关于将日期时间列转换为字符串列的主要内容,如果未能解决你的问题,请参考以下文章

将字符串列转换为日期时间格式

使用 SQL 将字符串列转换为 mongodb 中的日期时间

如何将数据框中的多个“字符串”列转换为日期时间列?

使用SQL将字符串列转换为mongodb中的日期时间

将带有日期和时间信息的字符串列转换为R [duplicate]中的datetime类型

如何在配置单元中将字符串数据类型列转换为日期格式