启动Jupyter notebook(因为jupyter是安装在虚拟环境中,所以每次使用该虚拟环境之前激活虚拟环境):
# 激活虚拟环境
source myenv/bin/activate
# 启动虚拟环境
jupyter notebook
正文
pandas提供了丰富的字符串操作功能,可以帮助你在数据清洗和预处理阶段处理文本数据。例如去除空格、大小写转换、正则表达式匹配等。
大小写转换:
.str.lower():将所有字符转换为小写。.str.upper():将所有字符转换为大写。.str.capitalize():将字符串首字母转换为大写,其余为小写。.str.title():将每个单词的首字母转换为大写。
import pandas as pd
# 假设这是你的原始数据
data = {'name': ['Amy', 'Tom', 'Jack cat'], 'sex': ['女', '男', '男']}
# 创建DataFrame
df = pd.DataFrame(data)
# 将'name'列中的所有字符串转换为小写
df['name'] = df['name'].str.lower()
print("字符串全部转小写:\n", df)
# 将'name'列中的所有字符串转换为大写
df['name'] = df['name'].str.upper()
print("\n字符串全部转大写:\n", df)
# 将'name'列中字符串首字母转换为大写,其余为小写
df['name'] = df['name'].str.capitalize()
print("\n字符串首字母转换为大写,其余为小写:\n", df)
# 将'name'列中每个单词的首字母转换为大写
df['name'] = df['name'].str.title()
print("\n每个单词首字母转换为大写:\n", df)
字符串全部转小写:
name sex
0 amy 女
1 tom 男
2 jack cat 男
字符串全部转大写:
name sex
0 AMY 女
1 TOM 男
2 JACK CAT 男
字符串首字母转换为大写,其余为小写:
name sex
0 Amy 女
1 Tom 男
2 Jack cat 男
每个单词首字母转换为大写:
name sex
0 Amy 女
1 Tom 男
2 Jack Cat 男
去除空格:
.str.strip():去除字符串两端的空格。.str.lstrip():去除字符串左侧的空格。.str.rstrip():去除字符串右侧的空格。
import pandas as pd
# 假设这是你的原始数据
data = {'name': [' Amy ', ' Tom ', ' Jack cat '], 'sex': ['女', '男', '男']}
# 创建DataFrame
df = pd.DataFrame(data)
# 去除'name'列中字符串两端的空格
df['name'] = df['name'].str.strip()
print("去除字符串两端的空格:\n", df)
# 去除'name'列中字符串左侧的空格
df['name'] = df['name'].str.lstrip()
print("\n去除字符串左侧的空格:\n", df)
# 去除'name'列中字符串右侧的空格
df['name'] = df['name'].str.rstrip()
print("\n去除字符串右侧的空格:\n", df)
字符串替换:
-
.str.replace():替换字符串中的某些字符或模式。s = pd.Series(['foo', 'bar', 'baz']) s.str.replace('foo', 'boo') # 'boo' 'bar' 'baz' s.str.replace('b.*', 'b', regex=True) # 'f' 'ar' 'az'
字符串分割:
-
.str.split():按照指定的分隔符将字符串分割成列表。python s = pd.Series(['a,b,c', 'd,e,f', 'g,h,i']) s.str.split(',') # ['a' 'b' 'c'] ['d' 'e' 'f'] ['g' 'h' 'i']
字符串填充:
-
.str.pad():填充字符串以达到指定的长度。s = pd.Series(['a', 'bb', 'ccc']) s.str.pad(width=5, side='right', fillchar='-') # 'a----' 'bb---' 'ccc--'
字符串截取:
.str.slice():截取字符串的一部分。
s = pd.Series(['hello', 'world', 'python'])
s.str.slice(1, 3) # 'el' 'or' 'yt'
在pandas的较新版本中,str.slice() 方法确实已经被弃用,因为它可以通过直接使用 Python 的切片语法来更简洁、更直观地实现相同的功能。
s = pd.Series(['hello', 'world', 'python'])
# 使用 Python 切片语法来替换 .str.slice()
# 切片从索引 1 开始(包含),到索引 3 结束(不包含)
s.str[1:3] # 'el' 'or' 'yt'
获取子字符串:
-
.str.get():获取字符串的某个位置的字符。s = pd.Series(['hello', 'world', 'python']) s.str.get(0) # 'h' 'w' 'p'
字符串长度:
-
.str.len():获取字符串的长度。s = pd.Series(['hello', 'world', 'python']) s.str.len() # 5 5 6
正则表达式匹配:
-
.str.match():检查字符串是否匹配正则表达式,并返回布尔值。 -
.str.contains():检查字符串是否包含正则表达式匹配的模式。s = pd.Series(['foo', 'bar', 'baz']) s.str.match('^ba') # False True False s.str.contains('oo') # True False False
- 编码和解码:
-
.str.encode():将字符串编码为字节序列。 -
.str.decode():将字节序列解码为字符串。s = pd.Series(['hello', 'world', 'python']) s.str.encode('utf-8') # b'hello' b'world' b'python' s.str.decode('utf-8') # 'hello' 'world' 'python'
字符串重复:
-
.str.repeat():重复字符串指定次数。s = pd.Series(['a', 'b', 'c']) s.str.repeat(3) # 'aaa' 'bbb' 'ccc'
字符串格式化:
-
.str.format():使用Python的字符串格式化方法。s = pd.Series(['{} {}'.format('foo', 'bar'), '{} {}'.format('baz', 'qux')]) s.str.format('Hello, {}') # 'Hello, foo bar' 'Hello, baz qux'
字符串查找和替换:
-
.str.find():查找子字符串在字符串中的位置。 -
.str.rfind():从字符串末尾开始查找子字符串的位置。s = pd.Series(['foobar', 'bazqux', 'foobarbaz']) s.str.find('bar') # 3 0 -1 s.str.rfind('bar') # 3 0 -1
字符串计数:
-
.str.count():计算子字符串在字符串中出现的次数。s = pd.Series(['foo bar', 'baz qux', 'foo bar foo']) s.str.count('foo') # 1 0 2
字符串比较:
-
.str.eq():比较字符串是否相等。 -
.str.ne():比较字符串是否不相等。 -
.str.startswith():检查字符串是否以指定的子字符串开始。 -
.str.endswith():检查字符串是否以指定的子字符串结束。s = pd.Series(['foo', 'bar', 'baz']) s.str.eq('foo') # True False False s.str.startswith('ba') # False True False s.str.endswith('z') # False False True