我正在尝试将一些文件读入Pandas数据框中,它们看起来像这样:
287212,xxxanxxxxx
5466029,xxxxxxxxxx
324561,nnnnxnnnna
687811,xxxxxxxxxn
67454,nnnaxnnnnn
或类似这样:
287226,0010100000
5466089,1110100000
324561,0010101000
687811,0000000000
67404,0010000000
我想要使用第一个多位数作为索引列,并使用','分隔符之后的值将每个字符分成一列。
例如这样的
index 1 2 3 4 5 6 7 8 9 10
287216 x x x a n x x x x x
5466029 x x x x x x x x x x
324561 n n n n x n n n n a
687811 x x x x x x x x x n
67404 n n n a x n n n n n
目前,我已经做到了这样:
df = pd.read_csv(csv_file, sep=',',header=None).set_index(0)
df = pd.DataFrame(df[1].apply(list).tolist()).set_index(df.index)
问题在于,第一行代码读取第二列为dtype = object。然后,当我使用第二行f代码将其拆分为一个列表时,每个字符或值仍为dtype = object,这会占用大量内存。而且我的脚本由于内存错误而不断崩溃。
是读取csv文件并指定dtypes的更直接的方法吗?
有人可以帮助我解决这个问题吗?
答案 0 :(得分:0)
您可以使用NumPy将字符串拆分为长度为1的字符串:
pd.DataFrame(df.values.astype("bytes").view("S1"), index=df.index)
或8位整数:
pd.DataFrame(df.values.astype("bytes").view(np.uint8), index=df.index)