Извлечение определенных чисел из текстовых файлов и вставка их во фрейм данных

#python #dataframe #text-mining

#python #фрейм данных #интеллектуальный анализ текста

Вопрос:

Добрый вечер, мне нужна помощь в извлечении двух чисел из текстового файла и вставке их в фрейм данных.

Это мой текстовый файл:

 PING 10.0.12.100 (10.0.12.100) 56(84) bytes of data.
64 bytes from 10.0.12.100: icmp_seq=1 ttl=59 time=0.094 ms
64 bytes from 10.0.12.100: icmp_seq=2 ttl=59 time=0.070 ms
64 bytes from 10.0.12.100: icmp_seq=3 ttl=59 time=0.076 ms
64 bytes from 10.0.12.100: icmp_seq=4 ttl=59 time=0.075 ms
64 bytes from 10.0.12.100: icmp_seq=5 ttl=59 time=0.070 ms
64 bytes from 10.0.12.100: icmp_seq=6 ttl=59 time=0.060 ms
64 bytes from 10.0.12.100: icmp_seq=7 ttl=59 time=0.093 ms
64 bytes from 10.0.12.100: icmp_seq=8 ttl=59 time=0.080 ms
64 bytes from 10.0.12.100: icmp_seq=9 ttl=59 time=0.077 ms
64 bytes from 10.0.12.100: icmp_seq=10 ttl=59 time=0.082 ms
64 bytes from 10.0.12.100: icmp_seq=11 ttl=59 time=0.070 ms
64 bytes from 10.0.12.100: icmp_seq=12 ttl=59 time=0.075 ms
64 bytes from 10.0.12.100: icmp_seq=13 ttl=59 time=0.087 ms
64 bytes from 10.0.12.100: icmp_seq=14 ttl=59 time=0.069 ms
64 bytes from 10.0.12.100: icmp_seq=15 ttl=59 time=0.072 ms
64 bytes from 10.0.12.100: icmp_seq=16 ttl=59 time=0.079 ms
64 bytes from 10.0.12.100: icmp_seq=17 ttl=59 time=0.096 ms
64 bytes from 10.0.12.100: icmp_seq=18 ttl=59 time=0.071 ms

--- 10.0.12.100 ping statistics ---
18 packets transmitted, 18 received, 0% packet loss, time 17429ms
rtt min/avg/max/mdev = 0.060/0.077/0.096/0.013 ms
 

Я хотел бы иметь такой фрейм данных:

введите описание изображения здесь

Это мой код:

 import pandas as pd

df = pd.DataFrame(columns=["ICMP_SEQ", "TIME"])

with open("/content/H11H22_ping.txt", "r") as f:
  txt = f.read() 
  print(txt)

  // code

  df = df.append({"ICMP_SEQ": icmp_seq, "TIME": time})
 

Спасибо

Комментарии:

1. Добавьте текстовый файл, а не изображение

2. К сожалению, я не знаю, как это сделать в stackoverflow… однако все обстоит именно так, как вы видите выше

Ответ №1:

Используйте str.extract:

 df = pd.read_csv('/content/H11H22_ping.txt', skiprows=1, header=None, names=['logs'])
res = df['logs'].str.extract(r'icmp_seq=(?P<icmp_seq>d )b. btime=(?P<time>d .d )', expand=True)
print(res)
 

Вывод (частичный)

    icmp_seq   time
0         1  0.094
1         2  0.070
2         3  0.076
3         4  0.075
4         5  0.070
5         6  0.060
6         7  0.093
7         8  0.080
8         9  0.077
9        10  0.082
10       11  0.070
11       12  0.075
12       13  0.087
13       14  0.069
14       15  0.072
15       16  0.079
16       17  0.096
17       18  0.071
...