使用 Pandas,从另一列的字符串切片创建一个新列 - 获取 NAN

问题描述 投票:0回答:1

我想从提取数据框 (DF) 列创建一个新列。 我所有的测试都表明我使用的值是正确的,并且应该产生与 NAN 相比的 level1 值。 救命!

代码片段:

import pandas as pd
string = df['currentagentsnapshot']
start  = string.str.find('agent-group') + 55
stop   = string.str.find('}, level2=')
df['start']  = string.str.find('agent-group') + 55
df['stop']   = string.str.find('}, level2=')
df['level1'] = string.str[df['start']:df['stop']]
print(df.head())

关键字段的示例输出:
|awsaccountid|开始|停止|level1 |992974280925|410 |414 |NaN |992974280925|410 |414 |NaN |992974280925|410 |414 |NaN |992974280925|408 |412 |NaN |992974280925|408 |412 |NaN

注意:df['currentagentsnapshot'] 是一个大文本字符串。只要 start 和 stop 都是数字 - 并且 stop > start - 我希望 string.str[df['start']:df['stop']] 产生预期的结果。

运行上述脚本会生成 NAN 而不是预期的字符串值。
我在 WEB 参考常数与计算值上检查过的所有示例。
当我用常量替换 string.str[start : stop] 中的计算值时,它起作用了。

python pandas substring nan
1个回答
0
投票

data = { 'currentagent': [ "一些带有代理组信息的大文本和 }, level2=更多文本", "另一个带有代理组数据的示例和 }, level2=续", "还有另一个字符串代理-组详细信息和 }, level2=info", "带有代理组数据的文本和 }, level2=more", "代理组信息的最后一个示例和 }, level2=内容" ] } df = pd.DataFrame(data)

def extract_level1(row): start = row['currentagent'].find('agent-group') + 55 stop = row['currentagent'].find('}, level2=') if start != -1并且 stop != -1 和 stop > start: return row['currentagentsnapshot'][start:stop] else: return None

df['level1'] = df.apply(extract_level1, axis=1)

打印(df)

© www.soinside.com 2019 - 2024. All rights reserved.