Educoder python Pandas高效化运算与时间序列处理 第1关:字符串操作方法


任务描述

本关任务:读取step1/bournemouth_venues.csv文件,获取Venue Name列,通过向量化字符串操作得到清洗后的数据。

相关知识

为了完成本关任务,你需要掌握:1.pandas字符串方法;2. 基本正则表达式。

字符串方法

如果你对Python字符串方法十分了解,那么下面的知识对你来说如瓮中捉鳖,几乎所有的Python内置的字符串方法都被复制到Pandas向量化字符串方法中。

下面列举为Pandas字符串方法借鉴Python字符串方法的内容:


它们的作用与Python字符串的基本一致,但是需要注意这些方法的返回值不同。举两个例子:

  • 样例1

 
  1. monte = pd.Series(['Graham Chapman', 'John Cleese', 'Terry Gilliam', 'Eric Idle', 'Terry Jones', 'Michael Palin'])
  2. monte.str.lower() # 返回字符串

输出:


 
  1. 0 graham chapman
  2. 1 john cleese
  3. 2 terry gilliam
  4. 3 eric idle
  5. 4 terry jones
  6. 5 michael palin
  7. dtype: object
  • 样例2

 
  1. monte.str.split() # 返回列表

输出:


 
  1. 0 [Graham, Chapman]
  2. 1 [John, Cleese]
  3. 2 [Terry, Gilliam]
  4. 3 [Eric, Idle]
  5. 4 [Terry, Jones]
  6. 5 [Michael, Palin]
  7. dtype: object

pandas中还有一些自带的字符串方法,如下图所示:

其中get_dummies()方法有点难以理解,给大家举个例子:假设有一个包含了某种编码信息的数据集,如 A= 出生在美国、B= 出生在英国、C= 喜欢奶酪、D= 喜欢午餐肉:


 
  1. full_monte = pd.DataFrame({
  2. 'name': monte,
  3. 'info': ['B|C|D', 'B|D', 'A|C', 'B|D', 'B|C', 'B|C|D']})
  4. print(full_monte)

输出:


 
  1. info name
  2. 0 B|C|D Graham Chapman
  3. 1 B|D John Cleese
  4. 2 A|C Terry Gilliam
  5. 3 B|D Eric Idle
  6. 4 B|C Terry Jones
  7. 5 B|C|D Michael Palin

get_dummies()方法可以让你快速将这些指标变量分割成一个独热编码的DataFrame(每个元素都是01):


 
  1. full_monte['info'].str.get_dummies('|')

输出:


 
  1. A B C D
  2. 0 0 1 1 1
  3. 1 0 1 0 1
  4. 2 1 0 1 0
  5. 3 0 1 0 1
  6. 4 0 1 1 0
  7. 5 0 1 1 1

正则表达式方法

还有一些支持正则表达式的方法可以用来处理每个字符串元素。如下图所示:

众所周知,正则表达式“无所不能”,我们可以利用正则实现一些独特的操作,例如提取每个人的first name


 
  1. monte.str.extract('([A-Za-z]+)')

输出:


 
  1. 0 Graham
  2. 1 John
  3. 2 Terry
  4. 3 Eric
  5. 4 Terry
  6. 5 Michael
  7. dtype: object

或者找出所有开头和结尾都是辅音字符的名字:


 
  1. monte.str.findall(r'^[^AEIOU].*[^aeiou]$')

输出:


 
  1. 0 [Graham Chapman]
  2. 1 []
  3. 2 [Terry Gilliam]
  4. 3 []
  5. 4 [Terry Jones]
  6. 5 [Michael Palin]
  7. dtype: object

如果你想深入了解这些方法的作用,请参考Pandas官方文档

编程要求

本关的编程任务是补全右侧上部代码编辑区内的相应代码,要求实现如下功能:

  • 读取step1/bournemouth_venues.csv文件,文件说明如下:
列名 说明
Venue Name 场地名
Venue Category 场地类别
Venue Latitude 场地经度
Venue Longitude 场地纬度
  • 以空格切分每个场地名并获取每个切分后列表的最后一个元素作为一个Series

  • 将所有单词为P开头的值替换为空,并删除所有为空的行;

  • 找出所有值不含字母的行并删除;

  • 返回清洗后的结果;

  • 具体要求请参见后续测试样例。

请先仔细阅读右侧上部代码编辑区内给出的代码框架,再开始你的编程工作!

测试说明

平台会对你编写的代码进行测试,对比你输出的数值与实际正确的数值,只有所有数据全部计算正确才能进入下一关。

测试输入:

无测试输入

预期输出:


 
  1. 0 Roast
  2. 1 DelMarco
  3. 2 Gardens
  4. 3 Gardens
  5. 4 Square
  6. 5 Stable
  7. 6 Starbucks
  8. 7 Co.
  9. 8 Gardens
  10. 9 Sandwich
  11. 10 Kitchen
  12. 11 Gym
  13. 12 Coffee
  14. 13 Bournemouth
  15. 14 Manger
  16. 15 Cucumber
  17. 16 Guys
  18. 17 Club
  19. 18 Beach
  20. 19 Odeon
  21. 20 Gelateria
  22. 21 Valerie
  23. 22 Greek
  24. 23 Slope)
  25. 24 Starbucks
  26. 26 Nero
  27. 28 Tealith
  28. 29 NEO
  29. 30 Bay
  30. 31 Aces
  31. ...
  32. 67 Co.
  33. 69 Garden
  34. 70 Brasserie
  35. 71 Restaurant
  36. 72 Gardens
  37. 73 Atlantico
  38. 74 Hotel
  39. 75 DYMK
  40. 76 Winchester
  41. 77 Subway
  42. 78 Circus
  43. 79 Bar
  44. 80 Triangle
  45. 81 Rojo
  46. 82 KFC
  47. 83 Hotel
  48. 84 Cliff
  49. 85 Xchange
  50. 86 Express
  51. 87 (Harvester)
  52. 88 Zag
  53. 89 (BMH)
  54. 90 Bournemouth
  55. 91 Coffee
  56. 92 Inn
  57. 93 Stop
  58. 94 Chineside
  59. 96 Hotel
  60. 97 Hotel
  61. 98 Chine
  62. Name: Venue Name, Length: 90, dtype: object
import pandas as pd
def demo():
    #********** Begin **********#
    data = pd.read_csv("./step1/bournemouth_venues.csv")
    data1 = data["Venue Name"]
    data2= data1.str.split().str.get(-1)
    data3 = data2.str.replace("P.*","")
    data3.drop(data3[data3.values==""].index,inplace = True)
    data4 = data3.str.contains("[a-zA-Z]+")
    data3.drop(data4[data4==False].index,inplace=True)
    return data3
    # ********** End **********#

 

©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值