当我们在处理数据时,经常需要执行字符串相关的操作。Pandas库中提供了许多方便的方法,可以使我们轻松地操作和操纵字符串。下面是一份详细的攻略,以及实例说明。
1. 切分
1.1 分列
Pandas库的str属性提供了许多方法来处理字符串。其中,split()方法可以在分列时进行分割。
例如,我们有一个包含“姓名、年龄、性别”的数据集,其中各列以“/”分割。使用split()方法,可以将各列分开。
import pandas as pd
data = {'info': ['Marry/21/Female', 'Bob/25/Male', 'Jack/17/Male']}
data = pd.DataFrame(data)
data[['Name', 'Age', 'Gender']] = data['info'].str.split('/', expand=True)
data = data.drop(columns=['info'])
print(data)
运行后的结果:
Name Age Gender
0 Marry 21 Female
1 Bob 25 Male
2 Jack 17 Male
1.2 切分字符串
str.split方法不仅可以在分列时使用,还可以对字符串中的子串进行切割。例如,我们有一个包含“年份-月份-日期-时间”的数据集,我们可以使用split()方法把它们切割开。
import pandas as pd
data = {'date_time': ['2010-12-01-14:32:00', '2010-12-02-14:32:00', '2010-12-03-14:32:00']}
data = pd.DataFrame(data)
data[['Year', 'Month', 'Day', 'Time']] = data['date_time'].str.split('-', 3, expand=True)
data = data.drop(columns=['date_time'])
print(data)
运行后的结果:
Year Month Day Time
0 2010 12 01 14:32:00
1 2010 12 02 14:32:00
2 2010 12 03 14:32:00
2. 替换
str.replace()方法可以替换字符串中匹配到的子串。
例如,我们有一个数据集,其中包含一些题目和答案的序号,以“.”隔开。我们可以使用replace()方法去掉序号,只保留题目和答案。
import pandas as pd
data = {'Question': ['1.What is the capital of England?', '2.What is the largest country in the world?', '3.What is the highest mountain in the world?'],
'Answer': ['a.London; b.Paris; c.New York; d.Washington', 'a.Russia; b.Canada; c.China; d.USA', 'a.Kilimanjaro; b.Everest; c.K2; d.Makalu']}
data = pd.DataFrame(data)
data['Question'] = data['Question'].str.replace(r'^\d+\.', '', regex=True)
data['Answer'] = data['Answer'].str.replace(r'^[a-z]\.', '', regex=True)
print(data)
运行后的结果:
Question Answer
0 What is the capital of England? London; Paris; New York; Washington
1 What is the largest country in th... Russia; Canada; China; USA
2 What is the highest mountain in ... Kilimanjaro; Everest; K2; Makalu
3. 匹配
3.1 匹配字符串
str.contains()方法可以检查某个字符串是否包含另外一个字符串。例如,我们可以用它来找出一组列表中包含“google”的元素。
import pandas as pd
data = {'source': ['google.com', 'facebook.com', 'twitter.com', 'apple.com']}
data = pd.DataFrame(data)
google = data[data['source'].str.contains('google')]
print(google)
运行后的结果:
source
0 google.com
3.2 正则表达式匹配
str.extract()方法可以使用正则表达式来匹配字符串中的子串,并把它们提取出来。
例如,我们有一个数据集,其中包含一些日志信息。日志信息的时间是以方括号包裹的。我们可以使用extract()方法,把时间提取出来。
import pandas as pd
data = {'log': ['[2019-05-31 15:43:20] INFO: Process started.', '[2019-05-31 15:45:20] WARNING: Connection refused.']}
data = pd.DataFrame(data)
data[['time', 'level', 'message']] = data['log'].str.extract(r'^\[([\d-:\s]+)\](\s+)(\w+):(.*)', expand=True)
data = data.drop(columns=['log'])
print(data)
运行后的结果:
time level message
0 2019-05-31 15:43:20 INFO Process started.
1 2019-05-31 15:45:20 WARNING Connection refused.
4. 操作
Pandas库提供了一些方便的方法来操纵字符串。
4.1 去除空格
str.strip()方法可以去除字符串中的空格。
例如,我们有一个包含一些人名的数据集,但每个名字后面都有一些空格。我们可以使用strip()方法来去掉这些空格。
import pandas as pd
data = {'name': [' John', 'Tom ', ' Mary ']}
data = pd.DataFrame(data)
data['name'] = data['name'].str.strip()
print(data)
运行后的结果:
name
0 John
1 Tom
2 Mary
4.2 大小写转换
str.lower()和str.upper()方法分别用于转换字符串中的字母为小写和大写形式。
例如,我们有一个数据集,包含许多字符串。我们可以使用lower()方法全部转换为小写,或者使用upper()方法全部转换为大写。
import pandas as pd
data = {'string': ['AbCdEfG', 'hIjKlMn', 'OPqRsTu']}
data = pd.DataFrame(data)
data['string_lower'] = data['string'].str.lower()
data['string_upper'] = data['string'].str.upper()
print(data)
运行后的结果:
string string_lower string_upper
0 AbCdEfG abcdefg ABCDEFG
1 hIjKlMn hijklmn HIJKLMN
2 OPqRsTu opqrstuv OPQRSTUV
以上就是Pandas库中操纵字符串的一些常用方法。我们可以根据具体需求选择适合的方法进行操作。