2017-10-10 8 views
1
Duration Protocol Direction Label 
12  tcp  bi  normal-V45 
2   udp  one  Botnet-45 
2   icmp bi  Botnet-68 
3   tcp  one  normal-V73 
5   udp  bi  Background-tcp 
3   icmp one  Background 

最後の列(ラベル)が標準またはボットネットの行を選択します。 Labelにnormal/Botnetが含まれているかどうかを確認する必要があります(通常の-V45とnormal-V73はボットネットの場合と同様の概念です)。出力は次のようにする必要があります。データフレームの最後の列に特定の値が含まれている行を選択する方法

Duration Protocol Direction Label 
12  tcp  bi  normal-V45 
2   udp  one  Botnet-45 
2   icmp bi  Botnet-68 
3   tcp  one  normal-V73 

私はpandasで以下を使用しますが、すべてのデータはcsvで提供されます。ヘルプありがとうございました。ありがとうございます。data1はすべてのデータがあるデータフレームです。[〜data1.iloc [:、 - 1] .strは最後の列を選択するためのものです。

datagrouped = data1.loc[~data1.iloc[:,-1].str == 'Botnet']

+2

の可能性のある重複した[列の値(文字列)のいずれかが含まれている場合はデータフレームの行をフィルタリングする方法pythonのセットの値?](https://stackoverflow.com/questions/36167381/how-to-filter-dataframe-rows-if-column-value-string-contains-any-of-the-values) – Vaishali

答えて

1

正規表現とブールインデックスと使用.str.contans

df[df.Label.str.contains(r'normal|Botnet')] 

出力:

Duration Protocol Direction  Label 
0  12  tcp  bi normal-V45 
1   2  udp  one Botnet-45 
2   2  icmp  bi Botnet-68 
3   3  tcp  one normal-V73 
+1

私はその機能について知らなかった。 [マニュアル](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.str.contains.html)に示されているように、デフォルトでは正規表現(reモジュール)に一致しているので、 df [df.Label.str.contains(r '^(normal | Botnet)\ - ')] 'のように、より具体的にすることもできます。あるいは、正規表現なしでPythonを使用して、 'df [df.Label.str.contains( 'normal'、regex = False)のようなブール演算子と組み合わせることができます。 df.Label.str.contains( 'Botnet'、regex = False)] '。この場合、最初の方が優先されると思います。 – mkastner

+1

ありがとう、これは動作します:) – Ara

関連する問題