web-dev-qa-db-ja.com

日時列を文字列列に変換しますか? Pandas-Python

日時列をPandasデータフレームの文字列に変換し直そうとしています。

これまでの構文は次のとおりです。

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

しかし、これはエラーを返します:

記述子「strftime」には「datetime.date」オブジェクトが必要ですが、「シリーズ」を受け取りました。

誰が私が間違っているのか教えてもらえますか?.

16
Colin O'Brien

バージョン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を呼び出すことはできません。そのため、エラー

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

日付がすでに文字列形式で必要な形式になっている場合は、これはもっと簡単だと思います。

2
Chris