熊猫行处理-如果找到startwith关键字-将行追加到上一行的末尾

问题描述

我对文本文件处理有疑问。我的文本文件打印为一列。该列中的数据分散在各行中,视觉上看起来不错,有些统一,但是仍然只有一列。最终,我想将在其中找到关键字的行追加到前一行的末尾,直到数据为一长行为止。然后,我将根据需要使用str.split()将节切成几列。

在Excel(代码自上而下)中,我采用了相同的文本文件,并删除了标题,并向左对齐,并搜索了关键字。找到后,Excel具有一个不错的功能,称为偏移量,您可以使用从活动单元格开始位置开始的该offset(x,y).value基本上在任何位置放置或附加单元格值。完成后,我将删除该行。这使我可以将数据转换为可以使用的表格列格式。

我需要什么: 下面的Python代码将在每一行中循环查找关键字“地址:”。这部分代码有效。找到关键字后,下一行应将行追加到上一行的末尾。这是我的问题所在。我找不到将活动行号转换为变量的方法,因此可以代替活动行的单词[index]。或[index-1]用于上一行。

类似任务的Excel代码

Do
    Set Rng = WorkRng.Find("Address",LookIn:=xlValues)
    If Not Rng Is Nothing Then
        Rng.Offset(-1,2).Value = Rng.Value
        Rng.Value = ""
    End If
Loop While Not Rng Is Nothing

等效于Python

import pandas as pd
from pandas import DataFrame,Series


file = {'Test': ['Last Name: Nobody','First Name: Tommy','Address: 1234 West Juniper St.','Fav 
Toy','Notes','Time Slot' ] }

df = pd.DataFrame(file)

                             Test
0               Last Name: Nobody
1               First Name: Tommy
2  Address: 1234 West Juniper St.
3                         Fav Toy
4                           Notes
5                       Time Slot

我尝试了以下操作:

for line in df.Test:
    if line.startswith('Address:'):
        df.loc[[index-1],:].values = df.loc[index-1].values + ' ' + df.loc[index].values        
            Line above does not work with index statement
    else:
        pass


# df.loc[[1],:] = df.loc[1].values + ' ' + df.loc[2].values  # copies row 2 at the end of row 1,# works with static row numbers only
# df.drop([2,0],inplace=True)  # Deletes row from df

预期输出:

                                               Test
0                                 Last Name: Nobody
1  First Name: Tommy Address: 1234 West Juniper St.
2                    Address: 1234 West Juniper St.
3                                           Fav Toy
4                                             Notes
5                                         Time Slot

我试图围绕整个系列向量化方法,但仍然坚持尝试半熟悉的循环。如果有办法实现这一目标,请指出正确的方向。

一如既往,我感谢您的时间和知识。如果您可以解决此问题,请告诉我。

谢谢

解决方法

Test上使用Series.shift,然后使用Series.str.startswith创建一个布尔掩码,然后对该布尔掩码使用布尔索引来更新Test列中的值:

s = df['Test'].shift(-1)
m = s.str.startswith('Address',na=False)
df.loc[m,'Test'] += (' ' + s[m])

结果:

                                              Test
0                                 Last Name: Nobody
1  First Name: Tommy Address: 1234 West Juniper St.
2                    Address: 1234 West Juniper St.
3                                           Fav Toy
4                                             Notes
5                                         Time Slot

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...