Измените ПОСЛЕДОВАТЕЛЬНОСТЬ логических значений [True, False, False ...] на последовательность битовых строк - PullRequest
0 голосов
/ 26 октября 2019

Вопрос 1

У меня есть фрейм данных, который я адаптировал из словаря, который я сделал после использования алгоритма Хаффмана в текстовом файле. Я преобразовал свой словарь в фрейм данных, но он изменил мои значения bitarray на True и False, и я хотел бы сохранить их как 1'a и 0.

Это фрагмент того, как выглядел мой словарь:

Huffman Dictionary 
{',': bitarray('0000'), 'k': bitarray('0001000'), '-': bitarray('000100100'), '?': bitarray('000100101'), 'A': bitarray('000100110')}

А вот фрагмент того, как выглядит мой фрейм данных:

Huffman Data Frame 
       character                                          bitString
    0          ,                       [False, False, False, False]
    1          k   [False, False, False, True, False, False, False]
    2          -  [False, False, False, True, False, False, True...
    3          ?  [False, False, False, True, False, False, True...
    4          A  [False, False, False, True, False, False, True...

Вотнекоторый код, который я разработал:

huffmanDictionary = {a[0]:bitarray(str(a[1])) for a in huffmanList}
    print("\n Huffman Dictionary \n")
    print(huffmanDictionary, "\n")

    encodedText = bitarray()
    encodedText.encode(huffmanDictionary, textFile)

    print("\n Encoded text \n")
    print(encodedText)

    print("\n Length of encoded text: ", len(encodedText), "\n")

    # making data frame to put the dictionary in for easier readability
    columnNames = ['character', 'bitString']
    huffDataframe = pd.DataFrame(list(huffmanDictionary.items()), columns = columnNames)

Любая и вся помощь очень ценится! Спасибо!

Вопрос 2

Также не уверен, если это возможно, но можно ли удалить [], а также запятые в столбце цепочки битов фрейма данных один разизменили обратно на 1 и 0?

1 Ответ

0 голосов
/ 26 октября 2019

Да, @Charles Duffy означает объявить ваш словарь следующим образом:

huffmanDictionary = {a[0]:bitarray(str(''.join(('1' if v else '0') for v in a[1]))) for a in huffmanList}

Также вы можете сделать что-то подобное после создания своего фрейма данных:

def bool_to_bit(s):
    r = ''
    for i in s:
        if i:
            r += '1'
        else:
            r += '0'
    return r

df['bitString'].apply(bool_to_bit)
...