gpt4 book ai didi

python - 如何使用 Python 中的正则表达式从预定义的子字符串列表中替换或更新 DataFrame 的字符串实例

转载 作者:太空宇宙 更新时间:2023-11-03 20:11:15 26 4
gpt4 key购买 nike

DataFrame 实例是混合字母数字字符串类型。但 DataFrame 中的所有实例仅包含三个字符串中的一个公共(public)子字符串,即 normal、background、botnet。我想将数据帧的所有实例替换为这 3 个实例,以便数据帧类型成为分类类型。

OriginalDF                                  ConvertedDF
To-background flow udp flows background
To-botnet flow tcp syn packet botnet
To-normal flow tcp syn packet normal
To-normal flow tcp flows normal
To-botnet flow ack connection established botnet
To- normal flow tcp flows normal
To-background flow tcp flows background

我尝试过使用迭代方法,效果很好。

   for i in range(cat_data.shape[0]):

if( "Background" in cat_data.Label[i]):
cat_data.Label[i] = "Background"
elif( "Normal" in cat_data.Label[i]):
cat_data.Label[i] = "Normal"
else:
cat_data.Label[i] = "Botnet"

他们是否使用正则表达式执行此类任务的任何标准或定制方式,仅使用一两个语句而不是传统的迭代方式来完成这项工作?

最佳答案

除了@Mad Physicist的解决方案之外,我还有其他解决方案。test.csv 容器如下

Original_DataFrame
To-background flow udp flows
To-normal flow tcp ack packet flows
To-botnet flow tcp syn packet
To- normal flow tcp flows
To- botnet flow ack connection
To- normal flow tcp flows
To- background flow tcp flows

解决方案 1:使用列表理解。我正在使用转换函数返回所需的字符串。我提出这个解决方案是为了证明有多种方法可以做到这一点。选择最适合您的一个。

import pandas as pd

def convert_string(string):
if 'background' in string:
return 'background'
elif 'normal' in string:
return 'normal'
elif 'botnet' in string:
return 'botnet'
else :
return 'Nan'

df = pd.read_csv('test.csv')
df['New_DataFrame'] = [ convert_string(string) for string in df['Original_DataFrame']]
print(df)

解决方案 2:使用 pandas 惯用语。 if-then 与 .loc

import pandas as pd
df = pd.read_csv('test.csv')
df['New_DataFrame'] = "XXX"
df.loc[df.Original_DataFrame.str.contains('normal'), 'New_DataFrame'] = 'normal'
df.loc[df.Original_DataFrame.str.contains('botnet'), 'New_DataFrame'] = 'botnet'
df.loc[df.Original_DataFrame.str.contains('background'), 'New_DataFrame'] = 'background'

关于python - 如何使用 Python 中的正则表达式从预定义的子字符串列表中替换或更新 DataFrame 的字符串实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58704537/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com