我想从提取数据框 (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] 中的计算值时,它起作用了。
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)