使用另一列中的值切片pandas列

2024-05-19 11:03:02 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个数据帧,其中一列有一些文本。 我试图在列的每一行中找到2个字符串,然后将这两个字符串之间的行文本切片以获得子字符串。像这样:

startinds = df[column].str.find("First Event = ")
endinds   = df[column].str.find("\nLast Event = ")

df["first_timestamp"] = df[column].str.slice(startinds,endinds)

现在这行不通,因为startindsendinds是系列的,所以我不能用它们作为索引来切片column中的字符串。在

有谁知道我可以访问值来处理每行的子字符串吗?在

输入示例:

^{pr2}$

输出:

^{3}$

Tags: 数据字符串文本eventdf切片columnfind
2条回答

要完成切片方法,可以使用lambda,即将startinds和{}存储在df中,然后根据列使用lambda跨列(注意,需要一个转义字符来获取\n

df['startinds'] = df['Data'].str.find("First Event = ")
df['endinds']  = df['Data'].str.find("\\nLast Event = ")

df.apply(lambda x : str(x['Data'])[x['startinds']:x['endinds']],1 )

输出:

^{pr2}$

与评论中的答案不同,这种使用Series.str.extract的方法应该可以工作:

df['first_timestamp'] = df['Data'].str.extract('(First Event = .+)')

#                                                 Data  \
# 0  Blahblah\nFirst Event = 09/20/2017 12:00:00\nL...   
# 1  Blahblahblahblah\nFirst Event = 09/20/2017 12:...   
# 
#                      first_timestamp  
# 0  First Event = 09/20/2017 12:00:00  
# 1  First Event = 09/20/2017 12:30:00

模式'(First Event = .+)'捕获一个组(即()),其中“First Event=”后跟一个或多个字符(即.+),在换行处停止(.字符匹配除换行符外的任何内容)。在

相关问题 更多 >

    热门问题