2017-01-24 179 views
-1

csv文件有10列数据,我试图展开参数到变量中。Python 3.5 csv输入显示额外字符'b'

import numpy as np 

A,B,C,D,E,F,G,H,I,Binary= np.loadtxt('C:\\Python\\Data1 \\sample_data.csv', 
            delimiter=',', unpack=True, dtype='str') 
print(B[50]) 

当我尝试print(B[50]),我得到的输出b '0.01'。实际值只是0.01

还有一个额外的字符b。我不明白那个角色是什么,或者如何去除它。

+0

这意味着你打印的不是一个字符串,而是一个字节数组。您可能想要解码它,例如'print(B [50] .decode(“utf-8”))' – Aaron

+0

为什么你使用'np.loadtxt',但用'pandas'标记问题?熊猫有一个更好的装备CSV加载器,将解码二进制数据。 –

回答

1

指定数据类型为dtype='str'。 这给你提供了字节串,这对数字没有用。

看起来像你想漂浮。如果所有的值转换,能漂浮,只是不提供数据类型,即不使用dtype='str'

A,B,C,D,E,F,G,H,I,Binary= np.loadtxt(file_name,d elimiter=',', unpack=True) 

如果列有不同的类型,你需要指定数据类型。 实施例为第三列:

A,B,C = np.loadtxt(file_name, delimiter=',', unpack=True, 
        dtype=[('A', float), ('B', float), ('C', int)]) 

添加D,E,F,G,H,I,Binary中相同的方式。

1

b'0.01'只是Python3显示字符串的方式。它的正常字符串类型是unicode。在numpy数组中,bytestrings有一个S dtype,常规字符串U

如果你在Python2中完成了这个工作,你只会看到'0.01',它的常规字符串(仍然是'S'dtype)。

如果你想要一个浮点数组,然后让loadtxt使用默认浮点数dtype

您需要向我们展示您的文件的少量样本(几行)。所有列号都是?任何字符串?

对于初始负载,我不鼓励使用unpack。从loadtxt获得一个数组更好,并检查一下。一旦你了解了它的内容,形状和dtype,那么你就可以将它分成若干列(如果真的有帮助的话)。我发现海报不理解未打包变量的错误太多了。