Python 将布尔值的序列[真、假、假…]更改为位字符串序列

Python 将布尔值的序列[真、假、假…]更改为位字符串序列,python,pandas,bit,huffman-code,Python,Pandas,Bit,Huffman Code,问题1 我有一个数据框,它是我在文本文件上使用哈夫曼算法后制作的词典改编而成的。我将字典转换为数据帧,但它将我的位数组值更改为True和False,我希望将它们保留为1'a和0's 这是我的字典的一个片段: Huffman Dictionary {',': bitarray('0000'), 'k': bitarray('0001000'), '-': bitarray('000100100'), '?': bitarray('000100101'), 'A': bitarray('00010

问题1

我有一个数据框,它是我在文本文件上使用哈夫曼算法后制作的词典改编而成的。我将字典转换为数据帧,但它将我的位数组值更改为True和False,我希望将它们保留为1'a和0's

这是我的字典的一个片段:

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,是否可以删除[]以及数据帧的位字符串列中的逗号?

是的,@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)

显而易见的(天真的?)答案是
bitarray(str(''.join('1'如果v else'0')表示seq中的v))
对不起,我不太清楚我的理解,你的意思是用上面的代码替换我原来在huffmanDictionary中为bitarray准备的代码吗@CharlesDuffyNope——上面的内容严格地针对标题中提出的问题,而不是下面的上下文。如果你真正的问题是改变pandas字符串化数据帧的方式,那不是我可以说的。我尝试了你的bool_to_位,它删除了我的“character”列。。。你知道为什么吗?它确实把所有的东西都变回了碎片,所以那个部分起作用了!!重新分配到同一列,因此,
df['bitString']=df['bitString'].apply(bool_to_bit)
我这样做了!我刚刚加入了stack overflow,所以我的代表还没有高到可以公开看到我的向上投票的程度:(但是我的向上投票被记录了!!好的,但是点击下面的复选标记,这样问题就可以结束了