1

こんにちは、すでにこの投稿を参照しましたが、問題を解決できませんでした。CSV に文字列の列があり、サンプル値は以下のとおりです (monthとのyear位置が逆になる場合があることに注意してください)。にどの形式を設定する必要がありto_datetimeますか? 以下のすべてのアプローチを試しました

df = pd.read_csv("filename.csv") #Imagine there is a Month column

#[1] df["Month"] = pd.to_datetime(df["Month"])
#[2] df["Month"] = pd.to_datetime(df["Month"], format="%m/%d/%Y")

[Month]
Mar-97
Apr-97
May-97
Jun-97
Nov-00
Dec-00
1-Jan
1-Feb
1-Mar
1-Apr

エラーが発生します

ValueError: 日が月の範囲外です

[1]の場合、私は得る

ValueError: 時間データ '97 年 3 月' は形式 '%m/%d/%Y' と一致しません (一致)

[2] の場合。私も削除しようとしまし%dたが、うまくいきませんでした。ここで何がうまくいかないのか教えてください。

4

2 に答える 2

1

1 つの方法は、try/exceptpd.Series.apply次のように使用することです。

s = pd.Series(['Mar-97', 'May-97', 'Nov-00', '1-Jan', '1-Mar'])

def converter(x):
    try:
        return pd.datetime.strptime(x, '%b-%y')
    except ValueError:
        year, month = x.split('-')  # split by delimiter
        x = year.zfill(2) + '-' + month  # %y requires 0-padding
        return pd.datetime.strptime(x, '%y-%b')

res = s.apply(converter)

print(res)

0   1997-03-01
1   1997-05-01
2   2000-11-01
3   2001-01-01
4   2001-03-01
dtype: datetime64[ns]

関数として定義converterしたので、これを次のように直接使用できますpd.read_csv

df = pd.read_csv('file.csv', parse_dates=['dt_col_name'], date_parser=converter)

Python の strftime ディレクティブdatetimeは、フォーマット文字列を作成するための便利なリファレンスです

于 2018-05-20T17:49:22.470 に答える