Pandas进阶捌 文本处理
pandas进阶系列根据datawhale远昊大佬的joyful pandas教程写一些自己的心得和补充
本文部分引用了原教程,并参考了
- 《利用Python进行数据分析》
- pandas官网
- python官网
- learn-regex-zh
另注:本文是对joyful pandas教程的延伸,完整理解需先阅读joyful pandas教程第八章
五、练习
Ex1:房屋信息数据集
现有一份房屋信息数据集如下:
- 将
year
列改为整数年份存储。 - 将
floor
列替换为Level, Highest
两列,其中的元素分别为string
类型的层类别(高层、中层、低层)与整数类型的最高层数。 - 计算房屋每平米的均价
avg_price
,以***元/平米
的格式存储到表中,其中***
为整数。
df = pd.read_excel('../data/house_info.xls', usecols=['floor','year','area','price'])
df.head()
floor | year | area | price | |
---|---|---|---|---|
0 | 高层(共6层) | 1986年建 | 58.23㎡ | 155万 |
1 | 中层(共20层) | 2020年建 | 88㎡ | 155万 |
2 | 低层(共28层) | 2010年建 | 89.33㎡ | 365万 |
3 | 低层(共20层) | 2014年建 | 82㎡ | 308万 |
4 | 高层(共1层) | 2015年建 | 98㎡ | 117万 |
【我的思路】
第一题和第二题都是通过正则挖出相应的内容即可
df.year = df.year.str.extract('(\d{1,4})')
df.head(2)
floor | year | area | price | |
---|---|---|---|---|
0 | 高层(共6层) | 1986 | 58.23㎡ | 155万 |
1 | 中层(共20层) | 2020 | 88㎡ | 155万 |
%timeit pd.to_numeric(df.year.str[:-2])
14.9 ms ± 1.18 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
%timeit df.year.str.extract('(\d{1,4})')
29 ms ± 7.51 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
这里将我的做法和答案对比了一下,发现答案用to_nermeric还是比正则要快很多的
df[['Level', 'Highest'