[英]Pandas make new columns from sub-string of another column
我正在尝试从另一列的子字符串在熊猫中创建新列。
import pandas as pd
import re
df = {'title':['Apartment 2 roomns, 40 m²', 'House 7 rooms, 183 m²', 'House 4 rooms, 93 m²', 'Apartment 12 rooms, 275 m²']}
我正在尝试使用正则表达式来捕获组:
df['Name'] = df.title.str.extract(r'(^[a-zA-Z]+)', expand=True)
这个我得到了一个很好的结果。 但是我需要一个包含房间数量的列(没有“房间”这个词)和另一个没有“m²”大小的列。 我试过了:
df['Rooms'] = df.title.str.replace(r'(^[0-9]+)\s(rooms)', r'\1') #to capture only the first group, which is the number
df['Size'] = df.title.str.replace(r'(^[0-9]+)\s(m²)', r'\1') #to capture only the first group, which is the number
我的输出:
Name Rooms Size
0 Apartment Apartment 2 roomns, 40 m² Apartment 2 roomns, 40 m²
1 House House 7 rooms, 183 m² House 7 rooms, 183 m²
2 House House 4 rooms, 93 m² House 4 rooms, 93 m²
3 Apartment Apartment 12 rooms, 275 m² Apartment 12 rooms, 275 m²
良好的输出:
Name Rooms Size
0 Apartment 2 40
1 House 7 183
2 House 4 93
3 Apartment 12 275
您可以使用
df["Rooms"] = df["title"].str.extract(r'(\d+)\s*room', expand=False)
df['Size'] = df["title"].str.extract(r'(\d+(?:\.\d+)?)\s*m²', expand=False)
输出:
>>> df
title Rooms Size
0 Apartment 2 roomns, 40 m² 2 40
1 House 7 rooms, 183 m² 7 183
2 House 4 rooms, 93 m² 4 93
3 Apartment 12 rooms, 275 m² 12 275
(\d+)\s*room
正则表达式匹配并捕获到第 1 组一个或多个数字,然后只匹配零个或多个空格( \s*
),然后是room
字符串。
(\d+(?:\.\d+)?)\s*m²
正则表达式匹配并捕获一个或多个数字,以及 a 的可选字符串.
和一个或多个数字,然后匹配零个或多个空格,然后匹配m²
字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.