如何在Pandas中操纵字符串

  • Post category:Python

当我们在处理数据时,经常需要执行字符串相关的操作。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库中操纵字符串的一些常用方法。我们可以根据具体需求选择适合的方法进行操作。