将datetime列转换回字符串列?熊猫 - Python

时间:2015-02-24 11:00:19

标签: python string datetime pandas

我试图将日期时间列转换回Pandas数据帧中的字符串。

我到目前为止的语法是:

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

但这会返回错误:

描述符' strftime'需要一个&datetime.date'但是收到了一个'系列'。

谁能告诉我哪里出错了?

4 个答案:

答案 0 :(得分:15)

如果您使用的是版本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作为参数,因此错误

答案 1 :(得分:9)

all_data['Order Day new']=all_data['Order Day new'].astype(str)

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

答案 2 :(得分:4)

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

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)

答案 3 :(得分:0)

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

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