Python 数据是包含标题和小节的列,如何拆分它?
我有一个字符串列表,如下所示:Python 数据是包含标题和小节的列,如何拆分它?,python,pandas,Python,Pandas,我有一个字符串列表,如下所示: 'A[title]' 'a' 'b' 'c' 'B[title]' 'd' 'C[title]' 'e' 'f' ... 'A[title]' ,'a' 'A[title]' ,'b' 'A[title]' ,'c' 'B[title]' ,'d' 'C[title]' ,'e' 'C[title]' ,'f' ... data=pd.Series(data) newd = [] for i in data.index: if '[' not in
'A[title]'
'a'
'b'
'c'
'B[title]'
'd'
'C[title]'
'e'
'f'
...
'A[title]' ,'a'
'A[title]' ,'b'
'A[title]' ,'c'
'B[title]' ,'d'
'C[title]' ,'e'
'C[title]' ,'f'
...
data=pd.Series(data)
newd = []
for i in data.index:
if '[' not in data[i]:
current_title = data[i]
else:
newd.append([current_title,data[i]])
其中每个块由标有“title”的标题分隔。
我需要将这些块分开,并将其格式化如下:
'A[title]'
'a'
'b'
'c'
'B[title]'
'd'
'C[title]'
'e'
'f'
...
'A[title]' ,'a'
'A[title]' ,'b'
'A[title]' ,'c'
'B[title]' ,'d'
'C[title]' ,'e'
'C[title]' ,'f'
...
data=pd.Series(data)
newd = []
for i in data.index:
if '[' not in data[i]:
current_title = data[i]
else:
newd.append([current_title,data[i]])
我目前正在使用for循环来完成这项工作,我的代码如下所示:
'A[title]'
'a'
'b'
'c'
'B[title]'
'd'
'C[title]'
'e'
'f'
...
'A[title]' ,'a'
'A[title]' ,'b'
'A[title]' ,'c'
'B[title]' ,'d'
'C[title]' ,'e'
'C[title]' ,'f'
...
data=pd.Series(data)
newd = []
for i in data.index:
if '[' not in data[i]:
current_title = data[i]
else:
newd.append([current_title,data[i]])
这是所需的格式,但实际上我正在尝试避免使用for循环。
那么,有没有一种方法可以通过内置的pandas函数来实现呢?您可以通过
str.contains
和ffill
data=data.to_frame('ori')
data['title']=data.ori[data.ori.str.contains('title')]
data=data.ffill().loc[lambda x : x.ori!=x.title]
data
Out[499]:
ori title
1 a A[title]
2 b A[title]
3 c A[title]
5 d B[title]
7 e C[title]
8 f C[title]
对于纯Python解决方案,您可以使用: 解释
[title]
结尾进行分组zip
的嵌套列表,将奇数元素提取为标题,将偶数元素提取为名称OP指定他们希望避免使用for循环,而只使用基于pandas的逻辑。列表理解本质上不是伪装成同一件事吗?@BrianJoseph,Pandas
str
方法内部不使用for
循环吗?值得注意的是,Pandas中的str
方法的实现效率低于list comp中的常规Python循环。当然,我完全同意Pandas方法在这种情况下可能较慢。我只是觉得OP想要在他们的解决方案中避免for循环,不是为了效率,而是为了学习熊猫语言。OP已经明确表示,他们可以用迭代/循环来解决问题,但不能用pandas语法