熊猫:在没有分隔符的情况下如何将位串读入单独的列?

时间:2019-06-05 10:10:41

标签: python-3.x pandas csv memory

我正在尝试将一些文件读入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的更直接的方法吗?

有人可以帮助我解决这个问题吗?

1 个答案:

答案 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)