marcopagot
@marcopagot (Asuka)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

def関数で定義したものを、DataFrameに適用したい。

解決したいこと

def関数で定義したものを、DataFrameに適用したい。

現状)
閲覧頂きありがとうございます。python初学者です。
現在、suumoの不動産データを用いて賃貸物件の家賃予測をしようとしています。
まず、築年数の特徴量を作成しようとしているのですが、その段階でエラーが出ています。
train['age']カラムに対して、get_age関数を反映させたいのですが、どのようにしたら反映させることが出来るでしょうか。

データの説明

train

データ

    title   category    address age floor   fee management_fee  deposit gratuity    madori  menseki
0   ドゥトゥールWEST   賃貸マンション   東京都中央区晴海3 \n築7年\n42階建\n   \r\n\t\t\t\t\t\t\t\t\t\t\t33階 22万円    15000    22万円    22万円    1LDK    44.67m2
1   ドゥトゥールWEST   賃貸マンション   東京都中央区晴海3 \n築7年\n42階建\n   \r\n\t\t\t\t\t\t\t\t\t\t\t31階 46万円    -   46万円    46万円    3LDK    100.9m2
2   ドゥトゥールWEST   賃貸マンション   東京都中央区晴海3 \n築7年\n42階建\n   \r\n\t\t\t\t\t\t\t\t\t\t\t42階 57万円    30000    57万円    57万円    4LDK    100.9m2
3   ドゥトゥールWEST   賃貸マンション   東京都中央区晴海3 \n築7年\n42階建\n   \r\n\t\t\t\t\t\t\t\t\t\t\t43階 58万円    20000    58万円    58万円    3LDK    100.9m2
4   ドゥトゥールWEST   賃貸マンション   東京都中央区晴海3 \n築7年\n42階建\n   \r\n\t\t\t\t\t\t\t\t\t\t\t52階 70万円    20000    140万円   70万円    2LDK    80.66m2

train['age']カラムの中には、築年数と階数(最上階)が記載されています。
下記関数を反映させて、新しく['age']カラムを作成して
DataFrameにくっつけたいです。

作成した関数

def get_age(s):
    start = s.index('築')+1
    end = s.index('年')
    return s[start:end]

これによって、築年数の数字だけ取り出せるようにしました。

エラー

age = pd.Series(train['age'])
age = age.map(get_age)
age
ValueError: substring not found

課題)
def関数は、正常に定義出来ました。
新しく['age']カラムにget_age関数を反映させて
それをDataFrameに追加するには、どうしたら良いでしょうか。
解決方法がわかる方、ご教示の程宜しくお願い致します。

0

1Answer

記載していただいたデータで試したところ、エラーが起きませんでした。

おそらく、エラーが出たデータのageカラムに「築?年」の形で値が入っていないものがあると考えられます。

そのため、エラーを出さないためには「築?年」の形ではないデータ、例えば「-」などがある場合を考慮した実装が必要です。

以下がエラーを出さないための実装例です。

def get_age(s):
	if "" in s and "" in s:
		start = s.index('')+1
		end = s.index('')
		return int(s[start:end])
	return "-"

train.age = train.age.map(get_age)

print(train.age)
# 0    7
# 1    7
# 2    - <--この行のageは「築?年」の形ではないデータ
# 3    7
# 4    7
# Name: age, dtype: object
0Like

Your answer might help someone💌