我有一个类似的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
。这将导致两个扩展组,这将干扰索引。