我试图清理我的数据,有一列名为“房间类型”( room Type),它有大约160-170个不同的值,应该只有10或15。例如,大多数数据都有这样的数据;一个房间以不同的方式输入:
"Single room level 1"
"Single room level 2"
"Single room Street Side"
“1层大床房”“2楼大床房”“套间街侧”“套房(包括迷你酒吧)”
我想清除所有的子数据,如层或街道侧,我希望我的数据集显示如下行:“单人房”“大床房”“大床房”“套房”“套房”
我想这样做,这样就更容易使用groupby函数,并根据每种类型的房间获得收益。我很抱歉没说清楚。
发布于 2020-10-14 08:16:36
再来一次。
输入
id room_type
1 Single room level 1
2 Single room level 2
3 Single room Street Side
4 Double room Street Side
码
df['room_type']= np.where(df['room_type'].str.contains('Single'),'Single','Double')
输出
id room_type
1 Single
2 Single
3 Single
4 Double
如果您有15种类型的房间,您可以使用np.select
而不是np.where
发布于 2020-10-14 08:11:41
下面是用一个例子来实现这一点的方法
import pandas as pd
import re
df = pd.DataFrame({'room_type': ["single", 'Single room', 'room', 'not a rooom']})
df['room_type'] = df['room_type'].apply(lambda room_type: 'Single Room' if re.search(r'single', room_type) else room_type)
上面的任何值都将替换为它中的单个。
发布于 2020-10-14 08:25:38
另一种略短的解决办法是:
import pandas as pd
df = pd.DataFrame({'room_type': ["Single room level 1", "Single room level 2",
"Single room Street Side", "Double Room"]})
df.room_type.apply(lambda x: "Single Room" if "single" in x.lower() else x)
如果您的数据不一致,那么您也可能有多个大写的单词“单”,所以您需要比较这个词的小写版本。您只需使用in
操作符(如在"single" in "single room"
中)来检查"single“是否属于字符串,并将此函数应用于整个列。
https://stackoverflow.com/questions/64349001
复制相似问题