PythonのPandasでデータの前処理を行っていますが、初心者です。
時間の集積を行いたいので、時刻の部分をdatetime型に変更したいのですが、
分が‘で入っていることと、分がなく秒から始まっている箇所があるために、
セオリー通り?の
pd.to_datetime(df['a'], format='%H時%M分S秒')
ではうまくいかないため、どうしたらよいものか考えあぐねております・・
df
a b c
2'40.24 46.32 1'56.66
2'00.76 20.64 49.33
¦
df.dtypes
a object
b float64
c object
これを、
df
a b c
00:02:40.24 00:00:46.32 00:01:56.66
00:02:00.76 00:00:20.64 00:00:49.33
df.dtypes
a datetime
b datetime
c datetime
このようにしたいです。
こういった場合、どのように処理したらよいでしょうか。。
知恵をお借りしたくよろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/12/02 08:12 編集
回答3件
0
read_csvでdtypeをobjectに指定して、文字列として取り込んでおいて、
最初に、分ありのパタンでdatetimeに変換して、
そこで変換できなかった部分(NaT)を、分なしのパタンで変換して、
fillnaで両者を結合します。
python
1import pandas as pd 2 3df = pd.read_csv('foo.csv', dtype={'a': object, 'b': object, 'c': object}) 4 5for col in ['a', 'b', 'c']: 6 pat1 = pd.to_datetime(df[col], format="%M'%S.%f", errors='coerce') 7 pat2 = pd.to_datetime(df.loc[pat1.isna(), col], format="%S.%f", errors='coerce') 8 df[col] = pat1.fillna(pat2) 9 10print(df)
回答とはあまり関係ないのですが、datetimeにするよりもtimedeltaにするほうがいいのではないかという気がします。
追記
timedeltaにする場合は、forの最後を下記のようにして、'1900-01-01 00:00:00'からの差分にするのが簡単だと思います。
python
1 df[col] = pat1.fillna(pat2) - pd.to_datetime('0.0', format='%S.%f')
投稿2021/12/02 08:38
編集2021/12/03 01:44総合スコア4794
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/12/03 01:33
退会済みユーザー
2021/12/03 02:17
2021/12/03 02:28
退会済みユーザー
2021/12/03 02:33
退会済みユーザー
2021/12/03 02:44
0
float 部分では、intに変換することで(小数点切り捨て)秒が、
1000倍して1000の余りを取ることでmsecが取れますんで、それでdatetimeに変換しては
投稿2021/12/02 07:51
総合スコア88042
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/12/02 08:31
2021/12/02 08:36
0
ベストアンサー
2'40.24
というのは 2分40秒240ミリセカンドの事かと思います。データには NaN
が含まれているとの事ですので、以下のコードでは NaN
を 00:00:00
に変換する様にしています。
python
1df["column_c"] = df["column_c"].apply(lambda x: 2 pd.to_datetime("0.0" if str(x) == "nan" else str(x), 3 format=("%M'%S.%f" if "'" in str(x) else "%S.%f"), 4 errors='coerce').time())
投稿2021/12/02 07:18
編集2021/12/02 09:38総合スコア20655
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/12/02 07:33
2021/12/02 07:39
2021/12/02 07:47
退会済みユーザー
2021/12/02 07:52
退会済みユーザー
2021/12/02 08:10
2021/12/02 08:14
退会済みユーザー
2021/12/02 08:28
2021/12/02 08:30
退会済みユーザー
2021/12/02 09:06 編集
2021/12/02 08:52
2021/12/02 09:04
退会済みユーザー
2021/12/02 09:08
2021/12/02 09:13
退会済みユーザー
2021/12/02 09:25
2021/12/02 09:28
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。