读取具有多于1个条目的列的数据

时间:2016-05-03 10:06:55

标签: python pandas matplotlib

我想阅读以下数据

name            nr         rep             meters
Bill            0           1              135
Chill           0           2              81, 81
Billy           5           6              175, 205, 187, 174, 240, 198
Sambouka        5           7              130, 113, 117, 118, 130
Chile           0           1              120

我尝试了以下内容:

data = pd.read_csv('data.dat', sep='\s+')

但显然它不起作用,因为最后一列meters有超过1个条目。有什么建议吗?

请注意,我正在处理的数据大约有100行,因此这不是完整的数据。

修改

使用@Abbas答案,它有效:

data = pd.read_csv('data.dat', sep='\s{2,}', engine='python')
print data['meters'][2] # output: 175, 205, 187, 174, 240, 198

print len(data['meters'][2]) # output 28 !

而输出应为6

毕竟,我想

plt.hist(data['meters'][2])

3 个答案:

答案 0 :(得分:3)

试试这个,只会将2个或更多空格视为分隔符:

data = pd.read_csv('data.dat', sep='\s{2,}')

添加了以下图片以供澄清: enter image description here

答案 1 :(得分:3)

您还可以使用任何数量的前面带逗号的空格作为分隔符,使用正则表达式负向后视:

data = pd.read_csv('data.dat', sep='(?<!,)\s+')

如果您还想忽略空格后跟逗号,请添加否定前瞻:

data = pd.read_csv('data.dat', sep='(?<!,)\s+(?!,)')

分割后,组合值当然是字符串而不是列表。您的示例包含28个字符,因此输出是您所期望的。

您可以使用列表解析将此字符串转换为Python的整数列表:

my_list_of_ints = [int(n) for n in my_string.split(",")] 

或使用内置map函数:

my_list_of_ints = map(int, my_string.split(","))

答案 2 :(得分:1)

这将完成它

data = pd.read_csv('data.dat', delim_whitespace=True)