python - 如何使用 Python 中的正则表达式从预定义的子字符串列表中替换或更新 DataFrame 的字符串实例
问题描述
DataFrame 实例是混合字母数字字符串类型。但是 DataFrame 中的所有实例仅包含三个字符串中的一个公共子字符串,即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:使用熊猫习语。如果-那么.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'
推荐阅读
- sql - 从sql中的字符串中提取电子邮件域
- java - 如何使用 Selenium 和 Java 单击基于 svg 的删除图标
- python - 使用 PyTesseract 读取数字
- reactjs - 使用脚本与 .core 反应的正确方法
- bootstrap-4 - 如何在引导程序中将图标放在进度条旁边?
- reactjs - Github 推送的更改在我的反应应用程序上不可见
- ios - WKWebView 高度变化
- google-bigquery - 位于 Google Bigtable 上的 Google BigQuery 表未在 Power BI 中列出
- asp.net-mvc-5 - 如何在asp.net mvc5中以零四舍五入值结尾
- reactjs - Typescript ReactDOM 呈现子类型错误