将日期时间列转换为字符串列
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
理解为参数,因此会出现错误
【讨论】:
在 pandas1.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 中的日期时间