pandasで1変数の情報を用いて2変数を作成したい

投稿者: Anonymous

dfにおけるxには、目的地までの来るまでの車での移動時間、または徒歩分数が混在しています。
index 2には、徒歩分数が入っています。
車での移動時間が入っている箇所では、「車x(ykm)」という形式になっています。
xから、車での移動時間を示すcar_timeと徒歩分数walk_timeの二つの変数を作成したいです。
現在は次のような状況ですが、walk_timeの、index=1, 2の部分に0が入りません。
私が、正規表現が分かっていないからだと思いますが、ご教示くださいますとありがたいです。

import pandas as pd
import numpy as np
import re

df = pd.DataFrame(
    {'x': ['車5(0.8km)', '5', '車27(8.6km)']},
    index=[1, 2, 3])

# 車時間のみを取り出し、欠損値には0をうめる。
df['car_time'] = df.x.str.extract(r'車(d*)').fillna(0)
# 徒歩分数のみを取り出し、欠損値には0を埋める
df['walk_time'] = df.x.str.extract(r'(d*)').fillna(0)

print(df)

出力結果:

            x car_time walk_time
1   車5(0.8km)        5          
2           5        0         5
3  車27(8.6km)       27          

解決

r'(d*)' だと空文字列にもマッチしてしまいます。1桁以上の数字から始まる文字列のみにマッチさせるために r'^(d+)' などとすると良いです。

作業途中の df.x.str.extract(***) あたりを print してみると NaN があるかないかが分かるので、違いに気づけます。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *