获取 DataFrame 中某一列的子串,在 Pandas 中可以通过 .str
属性来完成。这个属性能够对字符串类型的列进行向量化操作,例如 split、contains、replace 等。下面我们来详细说明如何在 Pandas-Python 中获取某一列的子串。
以以下示例数据集为例:
import pandas as pd
import numpy as np
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily', 'Frank'],
'age': [25, 30, 35, 20, 27, 22],
'city': ['New York', 'Paris', 'London', 'Tokyo', 'Sydney', 'New York']
})
假设这个 DataFrame 中有一列叫做 name
,我们想获取它的子串,可以按以下步骤操作:
1. 使用 str 属性
首先,我们需要将要操作的列 name
提取出来,并通过 str 属性来进行操作:
name_series = df['name']
name_series.str
输出:
0 Alice
1 Bob
2 Charlie
3 David
4 Emily
5 Frank
Name: name, dtype: object
<pandas.core.strings.accessor.StringMethods at 0x7fdaaa65c290>
这里我们可以看到,对 name_series
调用 str
属性得到的是一个 StringMethods 类型的对象,我这里取名为 name_str
来方便后面的调用。
2. 子串截取
获取子串截取的方式有两种,一种是使用 slice
函数,另一种是直接使用切片(slice):
使用 slice
函数
slice(start, stop, step)
表示从 start
索引处开始到 stop
索引处结束,以 step
步长提取。值得注意的是,start
和 stop
都可以代入负数,表示从后往前截取。下面我们以从索引 1 开始截取两个字符为例:
name_str.slice(1, 3, 1)
输出:
0 li
1 ob
2 har
3 avi
4 mil
5 ran
Name: name, dtype: object
直接使用切片
直接使用切片时,和普通的列表、数组切片的方法类似:
name_str.str[1:3]
输出:
0 li
1 ob
2 har
3 avi
4 mil
5 ran
Name: name, dtype: object
3. 获取子串的位置
有时候我们需要获取子串在原始字符串中的位置,可以使用 index
函数。其中的 sub
参数表示要查找的子串,start
和 end
都是可选参数,代表查找的起始位置和结束位置。
例如,我们要获取以字母 l
开头的子串在 name
列中的位置,可以这样写:
name_str.index('l')
输出:
0 3
1 2
2 2
3 1
4 1
5 3
Name: name, dtype: int64
如果要获取以 l
开头 且以 e
结尾的子串,可以这样写:
name_str.index('l', start=2, end=4)
输出:
2 2
Name: name, dtype: int64
4. 应用
将上面的子串提取操作添加到 DataFrame 中:
df['name_sub'] = name_str.slice(1, 3, 1)
在 DataFrame 中新增一列 name_sub
,表示提取的 name
列中的子串。
最终,我们得到了如下的 DataFrame:
name age city name_sub
0 Alice 25 New York li
1 Bob 30 Paris ob
2 Charlie 35 London har
3 David 20 Tokyo avi
4 Emily 27 Sydney mil
5 Frank 22 New York ran
最后,总结一下在 Pandas-Python 中获取数据子串的过程。首先使用 str
属性提取操作的列,然后使用 slice
函数或者切片操作获取子串,如果需要获取子串在原始字符串中的位置,则使用 index
函数。最后将操作结果保存到 DataFrame 中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在Pandas-Python中获取该列的子串 - Python技术站