看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
本例是将一个疑似编程代码的文本数据,提取出每个花括号的内容,并用序号进行标注。具体源数据可以看文本数据,需求结果可以先看看,最后得到的结果样例。
以下是数据样例:
from io import StringIO
import pandas as pd
import numpy as np
# 数据
data = '''
a
create tb1 {
col1
col2
}
a
DF
k
DFGF
create tb2 {
col1
col2
}
a
f
FD
DFGF
create tb3 {
col1
col2
}
a
y
FD
DFGF
create tb4 {
col1
col2
}
a
s
FD
DFGF
'''
df = pd.read_csv(StringIO(data))
df
# ...
需求为将大括号 { 和 } 之间的数据标注出来,然后标记为括号对的序号,从 1 开始。
读取数据后,后用 .str
访问器的一系列方法对 a 列的相关信息进行解析。即:
具体代码效果可查看下方的链式代码,注释掉后部代码可看前边每一步执行效果。
最终代码如下:
# 操作代码
(
df.assign(b=df.a.str.contains(r'{|}').astype(int))
.assign(c=lambda x: x.b.cumsum())
.assign(c=lambda x: np.where(df.a.str.contains(r'}'), x.c-1, x.c))
.assign(d=lambda x: np.where(x.c%2==1, (x.c/2+1).astype(int), pd.NA))
)
'''
a b c d
0 create tb1 { 1 1 1
1 col1 0 1 1
2 col2 0 1 1
3 } 1 1 1
4 a 0 2 <NA>
5 DF 0 2 <NA>
6 k 0 2 <NA>
7 DFGF 0 2 <NA>
8 create tb2 { 1 3 2
9 col1 0 3 2
10 col2 0 3 2
11 } 1 3 2
12 a 0 4 <NA>
13 f 0 4 <NA>
14 FD 0 4 <NA>
15 DFGF 0 4 <NA>
16 create tb3 { 1 5 3
17 col1 0 5 3
18 col2 0 5 3
19 } 1 5 3
20 a 0 6 <NA>
21 y 0 6 <NA>
22 FD 0 6 <NA>
23 DFGF 0 6 <NA>
24 create tb4 { 1 7 4
25 col1 0 7 4
26 col2 0 7 4
27 } 1 7 4
28 a 0 8 <NA>
29 s 0 8 <NA>
30 FD 0 8 <NA>
31 DFGF 0 8 <NA>
'''
以上代码保留了操作过程,d 列为最终需求想要的效果。
(完)
更新时间:2024-08-18 15:55:12 标签:pandas 代码