Python Как посчитать серию с несколькими предметами в одной строке - PullRequest
0 голосов
/ 17 ноября 2018
f = open("routeviews-rv2-20181110-1200.pfx2as", 'r')
#read file into array, ignore first 6 lines
lines = loadtxt("routeviews-rv2-20181110-1200.pfx2as", dtype='str', 
delimiter="\t", unpack=False)
#convert to dataframe
df = pd.DataFrame(lines,columns=['IPPrefix', 'PrefixLength', 'AS'])
series = df['AS'].astype(str).str.replace('_', ',').str.split(',')
arr = numpy.array(list(chain.from_iterable(series)))
ASes= pd.Series(numpy.bincount(arr))

ValueError: недопустимый литерал для int () с основанием 10: '31133_65500,65501'

Я хочу подсчитывать каждый раз, когда элемент появляется в столбце AS.Однако в некоторых строках есть несколько записей, которые необходимо сосчитать.

См.: Python Найти максимум в столбце данных для цикла, чтобы найти все значения

Txt файл: http://data.caida.org/datasets/routing/routeviews-prefix2as/2018/11/

Но это не может сосчитать строку 67820 ниже.

    Out[94]: df=
              A                 B       C
0             1.0.0.0           24  13335
1             1.0.4.0           22  56203
2             1.0.4.0           24  56203
3             1.0.5.0           24  56203
              ...          ...    ...
67820    1.173.142.0            24  31133_65500,65501
              ...          ...    ...
778719  223.255.252.0           24  58519
778720  223.255.254.0           24  55415

_ не является опечаткой, именно так оно и выглядит в файле.

Desired output.
1335     1
...     ..
31133    1
...     ..
55415    1 
...     ..
56203    3
...     ..
58159    1
...     ..
65500    1
65501    1
...     ..

1 Ответ

0 голосов
/ 17 ноября 2018

replace + split + chain

Перед использованием np.bincount:

вы можете заменить _ на ,, разделить и затем создать цепочку
from itertools import chain

series = df['A'].astype(str).str.replace('_', ',').str.split(',')
arr = np.array(list(chain.from_iterable(series))).astype(int)

print(pd.Series(np.bincount(arr)))

0     0
1     0
2     2
3     4
4     1
5     6
6     1
7     0
8     0
9     0
10    1
dtype: int64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...