次のデータフレームには、ネットワークファイアウォールからの構成アイテムが含まれています。各行は構成アイテムを表します。たとえば、行0
はforでobject network fake1
あり、これに関連付けられている唯一のパラメーターはに示されcol_0
、IPアドレス文字列です。host 10.0.0.1
さらに下にcol_0
はエントリがnetwork-object object fake1
あり、これは前述のものを参照しますobject network fake1
(作業する文字列パターンがあります)。次のように、IPアドレスセルから宛先セルにテキストをコピーしたいと思います。
私は次のように新しいデータフレームを作成することができます誰も助け所望の出力:
注意してください名前をすなわちfake1、fake2、PRT-アプリを変更することができますが、文字列「対象ネットワーク」、「オブジェクト・グループネットワーク」と「ネットワーク・オブジェクトのオブジェクトは、」常に同じになりますなど任意のコードので、試合に基づく相互参照名理想的であり、より大きな構成で拡張できます。
つまり、可能性がobject network foo
ありnetwork object object foo
ます。以下に示すように、一致するパターンがあります。
これを再現するためのテストデータは、次のdf.to_dict()
出力から取得できます。
import pandas as pd
import numpy as np
from numpy import nan
dfData = {'col_0': {'object network fake1': ' host 10.0.0.1',
'object network fake2': ' host 10.0.0.2',
'object network fake3': ' host 10.0.0.3',
'object network fake4': ' host 10.0.0.4',
'object network fake5': ' host 10.0.0.5',
'object-group network prt-apps': ' network-object object fake1',
'object-group network prt-apps2': ' network-object object fake4',
'object-group network prt-apps3': ' network-object object fake5'},
'col_1': {'object network fake1': nan,
'object network fake2': nan,
'object network fake3': nan,
'object network fake4': nan,
'object network fake5': nan,
'object-group network prt-apps': ' network-object object fake2',
'object-group network prt-apps2': ' group-object prt-apps',
'object-group network prt-apps3': ' group-object prt-apps2'},
'col_2': {'object network fake1': nan,
'object network fake2': nan,
'object network fake3': nan,
'object network fake4': nan,
'object network fake5': nan,
'object-group network prt-apps': ' network-object object fake3',
'object-group network prt-apps2': nan,
'object-group network prt-apps3': nan}}
pd.DataFrame(dfData)
私は何を試しましたか?
データを解析してこの投稿の形式にするのに何時間もかかりました。次に、パンダを使用した文字列操作を調べましたが、参照str.contains
はaに制限されてSeries
おり、df全体を解析できません。私はgroupby
これをどのように行うことができるかについて考えましたが、わかりません。助けに感謝します。
Ciscoファイアウォールを使用している人は、オブジェクト構成の命名規則によりこの投稿を見つける可能性があり、同様に役立つ解決策を見つける可能性があります。
多分正規表現とstr.contains
との組み合わせstr.replace
:
import re
df = pd.DataFrame(dfData)
for index in df.index: #loop through the index values
match = re.search(r'(fake\d)', index) #search for the "fake" + a digit
if match is not None:
fakenumber = match.group(1) #extract fake number ie "fake1"
for col in df.columns:
if True in df[col].str.contains(fakenumber).tolist():
df.loc[:, col] = df[col].str.replace(fakenumber, fakenumber + df.loc[index, 'col_0'])
df
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加