python pandascsv文件将整数转换为二进制



我有一个类似的csv文件

Meme1, Meme2, Meme3, Meme4, Meme5, Meme6
Meme1, Meme2, Meme3, Meme99, Meme5, Meme6
Meme5, Meme2, Meme2, Meme4, Meme10, Meme6
Meme99, Meme3, Meme4, Meme4, Meme5, Meme6

我想要那种

00000001, 00000010, 00000011, 00000100, 00000101, 00000110
00000001, 00000010, 01100011, 00000100, 00000101, 00000110
00000100, 00000010, 00000010, 00000100, 00001010, 00000110

意味着每个整数都应该转换为二进制,单词模因应该删除

I am trying but cannot do:(
import pandas as pd
import csv
import numpy as np
dataset = pd.read_csv('datsetcoma.txt')
reader = csv.DictReader(dataset)
print (reader)
# print back the headers
for row in reader:
if row.is_integer:

b=np.binary_repr(10, width=8)
print (b)

您也可以尝试以下操作:

import pandas as pd
import numpy as np
import io
# example taken from @ifly6  
df = pd.read_csv(io.StringIO('''Meme1, Meme2, Meme3, Meme4, Meme5, Meme6
Meme1, Meme2, Meme3, Meme99, Meme5, Meme6
Meme5, Meme2, Meme2, Meme4, Meme10, Meme6
Meme99, Meme3, Meme4, Meme4, Meme5, Meme6'''), header=None)
df.apply(lambda x: x.apply(lambda y:  bin(int(y.replace('Meme', '')))[2:].zfill(8) ) ) 
#output
0         1         2         3         4         5
0  00000001  00000010  00000011  00000100  00000101  00000110
1  00000001  00000010  00000011  01100011  00000101  00000110
2  00000101  00000010  00000010  00000100  00001010  00000110
3  01100011  00000011  00000100  00000100  00000101  00000110

使用不带头的import io加载DF时,我使用正则表达式提取整数,而不进行扩展。然后强制转换为整数类型。因为np.binary_repr不是矢量化的;矢量化";

由于np方法不保留索引,因此我在pd.Series构造函数中复制标记(保留多索引中保留的行和列位置所需的标记(,并将其拆回到原始数据帧形状。

df = pd.read_csv(io.StringIO('''Meme1, Meme2, Meme3, Meme4, Meme5, Meme6
Meme1, Meme2, Meme3, Meme99, Meme5, Meme6
Meme5, Meme2, Meme2, Meme4, Meme10, Meme6
Meme99, Meme3, Meme4, Meme4, Meme5, Meme6'''), header=None)
s = df.stack()
s = s.str.extract(r'(d+)', expand=False).astype(int)
pd.Series(np.vectorize(np.binary_repr)(s, width=8), index=s.index).unstack()

最终输出

0         1         2         3         4         5
0  00000001  00000010  00000011  00000100  00000101  00000110
1  00000001  00000010  00000011  01100011  00000101  00000110
2  00000101  00000010  00000010  00000100  00001010  00000110
3  01100011  00000011  00000100  00000100  00000101  00000110

Nb你在原始帖子中的二进制转换并不完全准确。当CCD_ 5应该是CCD_ 7时,它被错误地转换为CCD_。OP版本还省略了(可能是为了方便(最后一行。

Nb还指出,如果存在多个扩展组,这将不起作用。在一篇评论中,我提出了假设的例子foo123bar456。这将导致两个扩展组,这将干扰索引。

相关内容

  • 没有找到相关文章

最新更新