pandas提取某一列具有相同规律的数字
时间: 2023-11-04 22:14:19 浏览: 31
可以使用正则表达式来提取具有相同规律的数字列。假设数据框为df,列名为col,数字规律为3个数字-3个数字-4个数字,可以使用以下代码:
```
import re
pattern = r'\d{3}-\d{3}-\d{4}' # 正则表达式
df['new_col'] = df['col'].apply(lambda x: re.findall(pattern, str(x))[0] if re.findall(pattern, str(x)) else None)
```
解释一下代码:
1. `import re`:导入正则表达式模块。
2. `pattern = r'\d{3}-\d{3}-\d{4}'`:定义正则表达式,\d表示数字,{3}表示匹配三个数字,-表示匹配“-”符号。
3. `df['new_col'] = df['col'].apply(lambda x: re.findall(pattern, str(x))[0] if re.findall(pattern, str(x)) else None)`:使用apply函数对col列的每个元素应用lambda函数,lambda函数使用re.findall函数提取符合正则表达式的数字,如果提取到数字则返回第一个数字,否则返回None。最后将提取到的数字存入新的列new_col中。
需要注意的是,如果某些元素中没有符合正则表达式的数字,则会返回None。如果需要保留原始数据,可以将lambda函数中的else部分改为返回原始数据。
相关问题
pandas提取某一列有规律的数字
假设有一个DataFrame df,其中有一列数据如下:
```
col
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
10 11
11 12
```
如果要提取这一列中的偶数,可以使用如下代码:
```python
df[df['col'] % 2 == 0]['col']
```
输出结果为:
```
1 2
3 4
5 6
7 8
9 10
11 12
Name: col, dtype: int64
```
同理,如果要提取这一列中的奇数,可以使用如下代码:
```python
df[df['col'] % 2 == 1]['col']
```
输出结果为:
```
0 1
2 3
4 5
6 7
8 9
10 11
Name: col, dtype: int64
```
pandas提取某一列的有规律的字符串
如果要提取某一列的有规律的字符串,可以使用正则表达式和pandas中的str方法结合。
例如,假设有如下的DataFrame:
```
import pandas as pd
df = pd.DataFrame({
'name': ['John Doe', 'Jane Smith', 'Bob Johnson'],
'age': [30, 25, 40],
'email': ['john.doe@example.com', 'jane.smith@example.com', 'bob.johnson@example.com']
})
```
现在想要从email列中提取出所有的邮箱域名,可以使用正则表达式和str.extract方法:
```
df['email_domain'] = df['email'].str.extract(r'@([^.]+)\.')
```
这里的正则表达式@([^.]+)\.表示匹配@符号后面的一段非点号字符,直到遇到一个点号为止,也就是邮箱域名。extract方法会返回所有匹配的结果,因此需要使用[0]来取出第一个匹配结果。
运行上述代码后,DataFrame会变成这样:
```
name age email email_domain
0 John Doe 30 john.doe@example.com example
1 Jane Smith 25 jane.smith@example.com example
2 Bob Johnson 40 bob.johnson@example.com example
```
可以看到,email_domain列中提取出了所有的邮箱域名。