2016-02-13 3 views
0

у меня есть некоторые данные в формате CSV, который выглядит как:Преобразование коллекции двоичных данных в словаре occurencies с питона панд

Time [s],Data 
0.000916000000000,0b 1111 1110 0100 0100 0000 1111 0011 1100 
0.024800000000000,0b 1111 1110 0100 0100 0000 1111 0011 1100 
0.048684000000000,0b 1111 1110 0100 0100 0000 1111 0011 1100 
... 
4.729276000000000,0b 1111 1110 0100 1000 0000 1111 0000 1100 

Я хотел бы знать, какие двоичные коды встречается, и как часто, чтобы быть уверенным, которые являются значимые сигналы.

я понял, что это может быть легко достигнуто с питона панд:

import pandas as pd 
csv_data = pd.read_csv('./captures/idle binary.csv') 
occurencies = csv_data['Data'].value_counts() 

Это дает мне этот выход:

0b 1111 1110 0100 0100 0000 1111 0011 1100 195 
0b 1111 1110 0100 0000 0000 1111 0010 1100  8 
0b 1111 1110 0100 1000 0000 1111 0000 1100  6 
Name: Data, dtype: int64 

Во-первых, я woould хотите удалить 0b и все пробельные от данные для получения

11111110010001000000111100111100 

и я хотел бы транспонировать данные, поэтому у меня есть онемение ЭВ occurencies как индексы

195 11111110010001000000111100111100 
    8 11111110010000000000111100101100 
    6 11111110010010000000111100001100 

Для первой цели я попытался использовать

occurencies.replace('0b', '') 

для второго я попытался

occurencies.transpose() 

, но это не сработало. Я мог бы легко сделать

occurencies.to_dict() 

и чем Swicht ключей Dict стоимостей и редактировать значения, но я хотел бы добиться того же с пандами.

+0

IIUC то должно работать: 'occurencies.str.replace ('0b', ''). Str.replace (»», '') ', чтобы конкатенировать str, для достижения следующего бита вам нужно поменять местами данные и индексировать их, я бы просто построил новую серию с данными, обмениваемыми вокруг,' s = pd.Series (index = presenceencies.values, data = eventencies.index) ' – EdChum

+0

Я уже пробовал str.replace, но я получаю следующую ошибку: raise AttributeError (« Может использовать только .ter accessor со строкой » AttributeError: Может использовать только .ter accessor со строковыми значениями, которые используют np .ob ject_ dtype in pandas – karlitos

ответ

0

Обычно вы хотите, чтобы ваш индекс представлял уникальное значение, которое может быть легко нарушено, если вы используете результаты value_counts в качестве индекса.

Чтобы лишить вашу строку и переставить столбцы:

df = csv_data['Data'].value_counts().reset_index() 
df.columns = ['byte', 'count'] 
df['stripped_bytes'] = df.byte.str.split().apply(lambda x: "".join(x[1:]) if len(x) else "") 
df[['count', 'stripped_bytes']] 
    count     stripped_bytes 
0 195 11111110010001000000111100111100 
1  8 11111110010000000000111100101100 
2  6 11111110010010000000111100001100 
+0

Большое спасибо за объяснительный код. Это помогло много, я был финналем, способным использовать str. replace(), чтобы удалить все пробелы и 0b в начале. – karlitos