给定:包含user_url
列和其他列的Panda数据帧。
期望:添加到原始数据帧的新列,其中列由从user_url
列中的URL提取的信息组成。这些列是car_make
、model
、year
和user_id
。
一些额外信息:我们知道car_make
只包含带或不带"-"的字母。model
可以包含任何字符。year
的长度只有4位。user_id
将由任何长度的数字组成。
我厌倦了使用正则表达式来分割url,但当缺少信息或额外信息时,它失败了。我也试过只拼接数据,但使用拆分时遇到了同样的问题。
给定数据帧
mpg miles user_url
0 NaN NaN https://www.somewebsite.com/suzuki/swift/2015/674857
1 31.6 NaN https://www.somewebsite.com/bmw/x3/2009/461150
2 28.5 NaN https://www.somewebsite.com/mercedes-benz/e300/1998/13
3 46.8 NaN https://www.somewebsite.com/320d/2010/247233
4 21.0 244.4 https://www.somewebsite.com/honda/pass/2019/1038865
5 25.0 254.4 https://www.somewebsite.com/volkswagen/passat/11
预期数据帧
mpg miles user_url car_make model year
0 NaN NaN https://www.somewebsite.com/suzuki/swift/2015/674857 suzuki swift 2015
1 31.6 NaN https://www.somewebsite.com/bmw/x3/2009/461150 bmw x3 2009
2 28.5 NaN https://www.somewebsite.com/mercedes-benz/e300/1998/13 mercedes-benz e300 1998
3 46.8 NaN https://www.somewebsite.com/320d/2010/247233 NaN 320d 2010
4 21.0 244.4 https://www.somewebsite.com/honda/pass/2019/1038865 honda pass 2019
5 25.0 254.4 https://www.somewebsite.com/volkswagen/passat/11 volkswagen passat NaN
user_id
0 674857
1 461150
2 13
3 247233
4 1038865
5 11
您只需要执行
split=df['user_url'].str.split("/", n = 4, expand = True)
df['car_make']=split[3]
df.loc[df['car_make'].str.contains('1|2|3|4|5|6|7|8|9|0'),'car_make']=np.nan