2017-07-20 18 views
3

初心者python(したがってpandas)ユーザー。私はいくつかのデータをpandasデータフレームにインポートしようとしています。列の1つは日付ですが、形式は "YYYYMM"です。私はほとんどのフォーラムの応答が示唆何をしようとしてきた:Python - Pandas - YYYYMMをdatetimeに変換する

df_cons['YYYYMM'] = pd.to_datetime(df_cons['YYYYMM'], format='%Y%m') 

これはしかし(ValueError: unconverted data remains: 3)が動作しません。この列には、MM = 13の各年の追加値が実際に含まれています。ソースはこの行を過去1年間の平均として使用しました。私はto_datetimeがそれに問題があると推測しています。

年間平均(最後の2桁の数字が「13」のもの)を除外するか、またはto_datetimeを無視するかのいずれかの迅速なソリューションを提供できますか?

+0

データのインポート中に解析しようとしましたか?たとえば、pandasで 'read_csv'を使ってcsvを読むと、引数は' parse_dates = [your_col_name] ' – ysearka

答えて

1

パスerrors='coerce'、その後dropnaNaT行:

df_cons['YYYYMM'] = pd.to_datetime(df_cons['YYYYMM'], format='%Y%m', errors='coerce').dropna() 

ダフの月の値が代わりにあなたが変換

df_cons['YYYYMM'] = pd.to_datetime(df_cons.loc[df_cons['YYYYMM'].str[-2:] != '13','YYYYMM'], format='%Y%m', errors='coerce') 
前にそれらを除外することができ NaT

In[36]: 
pd.to_datetime('201613', format='%Y%m', errors='coerce') 

Out[36]: NaT 

に変換されます

返されるSeriesは同じ長さにする必要があるため、整列の問題が発生する可能性があります。を渡すだけの方が簡単です

+0

です。ありがとうございました。 '.dropna()'が実際にはNaT行を削除していないように見えますが、私はその部分を理解できると思います。 – Mtd240

+0

これを別のステップとして行う必要があるかもしれません。割り当ての後で 'dropna()'を呼び出してください – EdChum

+0

これはうまくいきました - ありがとう! – Mtd240

0

まずデータフレームをクリーンアップします。

df_cons = df_cons[~df_cons['YYYYMM'].str.endswith('13')] 
df_cons['YYYYMM'] = pd.to_datetime(df_cons['YYYYMM']) 

YYYYMM列がデータセット内で一意である場合、列を期間インデックスにすることをお勧めします。

最初にYYYYMMをインデックスに変換し、それを月間に変換します。

df_cons = df_cons.reset_index().set_index('YYYYMM').to_period('M') 
関連する問題