将日期时间列转换为字符串列
Converting a datetime column to a string column
我正在尝试将日期时间列转换回 Pandas 数据帧中的字符串。
我目前的语法是:
all_data['Order Day new'] = dt.date.strftime(all_data['Order Day new'], '%d/%m/%Y')
但是这个 returns 错误:
描述符 'strftime' 需要一个 'datetime.date' 对象但收到了一个 'Series'。
谁能告诉我哪里错了。
如果您使用的是 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
作为参数,因此出现错误
all_data['Order Day new']=all_data['Order Day new'].astype(str)
我认为这更简单,如果日期已经是您想要的字符串形式的格式。
在我的例子中,我有一个 pySpark 数据框。这就是我将时间戳类型的“天”转换为字符串的方式:
import pyspark.sql.functions as F
convertedDf = rawDf.withColumn('d2', F.date_format(rawDf['day'], 'yyyyMMdd'))
要将所有日期时间列转换为字符串,请使用以下代码。
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)
我正在尝试将日期时间列转换回 Pandas 数据帧中的字符串。
我目前的语法是:
all_data['Order Day new'] = dt.date.strftime(all_data['Order Day new'], '%d/%m/%Y')
但是这个 returns 错误:
描述符 'strftime' 需要一个 'datetime.date' 对象但收到了一个 'Series'。
谁能告诉我哪里错了。
如果您使用的是 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
作为参数,因此出现错误
all_data['Order Day new']=all_data['Order Day new'].astype(str)
我认为这更简单,如果日期已经是您想要的字符串形式的格式。
在我的例子中,我有一个 pySpark 数据框。这就是我将时间戳类型的“天”转换为字符串的方式:
import pyspark.sql.functions as F
convertedDf = rawDf.withColumn('d2', F.date_format(rawDf['day'], 'yyyyMMdd'))
要将所有日期时间列转换为字符串,请使用以下代码。
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)