333

pandas.to_datetimeデータの日付を解析するために使用します。datetime64[ns]日付はすべて毎日のみですが、パンダはデフォルトで日付を表します。データをCSVに書き込むときに、日付datetime.dateに. タイプを要素ごとに手動で変換できることはわかっています。datetime64[D]00:00:00

[dt.to_datetime().date() for dt in df.dates]

しかし、私は多くの行を持っているので、これは本当に遅く、使用の目的を無効にしpandas.to_datetimeます。dtype列全体を一度に変換する方法はありますか? またはpandas.to_datetime、精度の指定をサポートしているので、毎日のデータを操作しているときに時間の部分を取り除くことができますか?

4

12 に答える 12

36

OPが提起した質問に対する最も直接的な回答であるEdChumの回答に賛成しましたが、パフォーマンスの問題を実際には解決しません(まだpythondatetimeオブジェクトに依存しているため、それらに対する操作はベクトル化されません-つまり、遅くなります)。

より良いパフォーマンスの代替手段は、 を使用することdf['dates'].dt.floor('d')です。厳密に言えば、時刻を に設定するだけなので、「日付部分のみを保持」しません00:00:00。ただし、たとえば次の場合は、OP の要求どおりに機能します。

  • 画面への印刷
  • csvに保存
  • 列を使用してgroupby

...そして、操作がベクトル化されるため、はるかに効率的です。

編集:実際、OPが好む答えは、おそらく「すべての観測の場合、最近のバージョンは時間をcsvに書き込みpandasません」です。00:00:00

于 2017-01-18T11:57:38.823 に答える
20

パンダDatetimeIndexには、まさにあなたが望むことをSeries行うメソッドが呼び出されています。normalize

詳細については、この回答を参照してください。

として使用できますser.dt.normalize()

于 2016-11-02T12:31:05.640 に答える
6

への変換datetime64[D]:

df.dates.values.astype('M8[D]')

それを DataFrame col に再割り当てすると、[ns] に戻ります。

実際が必要な場合datetime.date

dt = pd.DatetimeIndex(df.dates)
dates = np.array([datetime.date(*date_tuple) for date_tuple in zip(dt.year, dt.month, dt.day)])
于 2013-04-23T20:07:12.260 に答える