我想阅读以下数据
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])
答案 0 :(得分:3)
答案 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)