Есть ли более быстрый способ конвертировать большой файл из hexa в двоичный файл и двоичный в int? - PullRequest
0 голосов
/ 29 марта 2019

У меня большой DataFrame (1999048 строк и 1col) с шестнадцатеричными данными. Я хочу поместить каждую строку в двоичную форму, разрезать ее на части и преобразовать каждую часть в десятичном формате.

Я пробовал это:

for i in range (len(df.index)):
    hexa_line=hex2bin(str(f1.iloc[i]))[::-1] 
    channel = int(hexa_line[0:3][::-1], 2)     
    edge = int(hexa_line[3][::-1], 2)      
    time = int(hexa_line[4:32][::-1], 2)   
    sweep = int(hexa_line[32:48][::-1], 2)  
    tag = int(hexa_line[48:63][::-1], 2)   
    datalost = int(hexa_line[63][::-1], 2)   
    line=np.array([[channel, edge, time, sweep, tag, datalost]])
    tab=np.concatenate((tab, line), axis=0)

Но это действительно очень долго .... Есть ли более быстрый способ сделать это?

1 Ответ

0 голосов
/ 29 марта 2019

Единственное, что я могу себе представить, помогая многим, это изменить эти строки:

line=np.array([[channel, edge, time, sweep, tag, datalost]])
tab=np.concatenate((tab, line), axis=0)

, конечно, в пандах, и я думаю, что и в numpy concatting это дорогое занятие, и оно зависит от размераобщий размер обоих массивов (а не, скажем, list.append)

Я думаю, что это делает, перезаписывает весь массив tab каждый раз, когда вы вызываете его.Возможно, вы можете попробовать добавить каждую строку в список, а затем объединить весь список вместе.

например, что-то вроде этого:

tab = []
for i in range (len(df.index)):
    hexa_line=hex2bin(str(f1.iloc[i]))[::-1] 
    channel = int(hexa_line[0:3][::-1], 2)     
    edge = int(hexa_line[3][::-1], 2)      
    time = int(hexa_line[4:32][::-1], 2)   
    sweep = int(hexa_line[32:48][::-1], 2)  
    tag = int(hexa_line[48:63][::-1], 2)   
    datalost = int(hexa_line[63][::-1], 2)   
    line=np.array([[channel, edge, time, sweep, tag, datalost]])
    tab.append(line)

final_tab = np.concatenate(tab, axis=0)
# or whatever the syntax is :p
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...