2017-04-14 24 views
2

私は、情報フィールドからシーケンス番号のみを持つ別の列にシーケンス番号を抽出しようとしているCSVファイルとしてipパケットを持っています。シーケンス番号は、情報文字列の途中の部分文字列です。だから私の生のコードです。まず、シーケンス番号の新しい列を作成し、その後、InfoフィールドにSeq番号が含まれているかどうかを確認してから、情報フィールドを分割してシーケンス番号を取得します。 'Seq = j.split ...'の後に印刷すると、正しい値が得られます。それをCSVファイルのSeq列に書き込むにはどうすればよいですか?Python/Pandasの別の列にデータをコピーする

file = pd.read_csv(file.csv) 

file['Seq'] = None 
for i in file['Info']: 
    if 'Seq' in i: 
     split = i.split(' ') 
     for j in split: 
      if 'Seq=' in j: 
       Seq = j.split('Seq=',1)[1] 
       file.loc[i,'Seq'] = int(Seq) 

例CSV:

No. Time  Source  Destination Protocol Length Info 
1 0.000000 sourceip 192.168.0.1 TCP   54  35165 > 80 [SYN] Seq=0 Win=16384 Len=0 
2 0.000001 sourceip 192.168.0.1 TCP   54  14378 > 80 [SYN] Seq=0 Win=16384 Len=0 
3 0.000003 sourceip 192.168.0.1 TCP   54  31944 > 80 [SYN] Seq=0 Win=16384 Len=0 

望ましい結果:

No. Time  Source  Destination Protocol Length Info         Seq 
1 0.000000 sourceip 192.168.0.1 TCP   54  35165 > 80 [SYN] Seq=0 Win=16384 Len=0 0 
2 0.000001 sourceip 192.168.0.1 TCP   54  14378 > 80 [SYN] Seq=0 Win=16384 Len=0 0 
3 0.000003 sourceip 192.168.0.1 TCP   54  31944 > 80 [SYN] Seq=0 Win=16384 Len=0 0 
+0

チラッから、それは大丈夫そうです。あなたは 'file.to_csv'を試しましたか?例外はありましたか? – tmrlvi

+0

私はそれを試みました。例外はありませんが、Seq列はありますが、すべての値は空です。どのような時点でファイルを書くべきですか?すべてのforループの後またはforループの中で?私はこのすべてのものに本当に新しいです。 – Tirion

+0

最後にファイルを書きます。あなたが望むものすべてを抽出した後。以下のpiRSquared'dメソッドは出力を抽出しませんでしたか?ファイルが正しく読み込まれていることを確認することができます。抽出された最初の10行を表示するには 'print(file.head())'を試してください。 – tmrlvi

答えて

2

使用str.extract

file['Seq'] = file.Info.str.extract('Seq=(\d+)', expand=False).astype(float) 
+1

これは質問の 'read_csv'の下にあるすべてのコードを置き換えます – tmrlvi

+0

Seq値がまったくない場合でも可能ですか?私はこれを試しValueErrorを得ました:float NaNを整数に変換できません。 – Tirion

+0

「Seq」がない場合、あなたは何をしたいですか? – piRSquared

関連する問題