【问题标题】:Change SEQUENCE of boolean values [True, False, False...] to bit string sequence将布尔值 [True, False, False...] 的 SEQUENCE 更改为位串序列
【发布时间】:2019-10-25 21:03:27
【问题描述】:

问题 1

我有一个数据框,它改编自我在文本文件上使用霍夫曼算法后制作的字典。我将字典转换为数据框,但它将我的位数组值更改为 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,是否可以删除[]以及数据帧的位串列中的逗号?

【问题讨论】:

  • 显而易见(天真的?)答案是bitarray(str(''.join(('1' if v else '0') for v in seq)))
  • 对不起,我不太确定我是否遵循,你的意思是用上面的代码替换我原来在 huffmanDictionary 中的 bitarray 吗? @CharlesDuffy
  • 不——以上是严格针对标题中提出的问题,而不是看下面的上下文。如果您真正的问题是关于更改 pandas 对数据框进行字符串化的方式,那不是我可以谈论的问题。

标签: python pandas bit huffman-code


【解决方案1】:

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

【讨论】:

  • 我试过你的 bool_to_bits 并且它删除了我的列“字符”......有什么想法吗?
  • 它确实把所有东西都改回了位,但那部分工作了!!
  • 重新分配到同一列,所以df['bitString'] = df['bitString'].apply(bool_to_bit)
  • 我做到了!我刚刚加入了堆栈溢出,所以我的代表还不够高,无法让我的赞成票被公开:(但我的赞成票被记录了!!
  • 好的,但是点击下面的复选标记以便可以关闭问题
猜你喜欢
  • 1970-01-01
  • 2011-12-28
  • 2011-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多