2

パンダの時系列に変換した日付を含むパンダのデータフレームがあります。

そこから、頻度を月に設定した期間形式で、日付列と同じ列をDFに追加したいと思いました。

問題は、データフレーム内で、期間列が数値として印刷されることです(2009-1は468として印刷され、2009-2は469として印刷されます)。

DFの外部に別のPeriodIndexオブジェクトを作成する場合、これは問題ではありません。

私は何が間違っているのですか?

フォーマットされていない時間列をDateTimeに変換するために使用したコード:

subset['Created On'] = pd.to_datetime(subset['Created On'])

ピリオドを含む列を作成するためのコード:

subset['Month'] = pd.PeriodIndex(subset['Created On'],freq='M')

別のPeriodIndexオブジェクトを作成し、月の形式で日付を適切に表示するコード:

months = pd.PeriodIndex(subset['Created On'],freq='M')

編集:

コメントで要求されているように、subset [:1] .to_dict()は以下を出力します。

#[Out]# {'Created On': {12822544: <Timestamp: 2009-01-01 00:00:00>}, 'City': {12822544: 'BROOKLYN'}, 'Borough': {12822544: 'Unspecified'}, 'Location': {12822544: '(40.65662129596871, -73.95806621423951)'}, 'Closed Date': {12822544: '01/07/2009 12:00 AM'}}

OP以降、セッションが失われ、データをDFに再アップロードする必要があったことに注意してください。この時点では、pd.to_datetimeメソッドを使用して、列「CreatedOn」をタイムスタンプに変換しただけです。それ以来、私は以下を使用してみました:

subset['Created On'].resample('M')

エラーが発生します:

TypeError: Only valid with DatetimIndex or PeriodIndex

おそらく問題の一部は、日付列をDFインデックスとして使用していないことですか?もしそうなら、それはたくさんの非一意の値を含み、私はすでにインデックスをより代表する一意のIDフィールドを使用しているので、それはうまくいきません。

4

1 に答える 1

2

バグです。一時的な回避策として、次のことができます。

subset['Month'] = pd.PeriodIndex(subset['Created On'],freq='M').asobject

http://github.com/pydata/pandas/issues/2281

于 2012-11-18T19:01:30.647 に答える