DataFrame实例是混合字母数字字符串类型。但是DataFrame中的所有实例都只包含三个字符串中的一个公共子字符串,即普通、后台、僵尸网络。我希望将dataframe的所有实例替换为这3个实例,以便dataframe类型成为绝对类型。
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"他们是否有任何标准的或自定义的方式来执行这样的任务,使用正则表达式,它只使用一两条语句,而不是传统的迭代方式?
发布于 2019-11-06 05:48:57
除了@Mad物理学家的解答之外,我还有其他的解决方案。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:使用熊猫习语。如果-那么使用.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'发布于 2019-11-05 06:46:07
由于您正在使用regex,所以可以使用捕获组提取所需的文本:
df['data'].str.replace('.*(normal|background|botnet).*', '\\1')替换字符串中类似于\1的反向引用允许您引用捕获组的内容。
发布于 2019-11-05 04:47:19
使用应用函数:看看这个Remove opening and closing parenthesis with word in pandas
只是伪代码
def f(x):
apply regex like re.findall(exp,x)
nested if else
check if val == value 1:
return something
other if else condition
df['label'] = df['label'].apply(f)https://stackoverflow.com/questions/58704537
复制相似问题