读取一列有多个条目的数据

2024-09-29 01:34:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我想阅读以下数据

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有多个条目。有什么建议吗?你知道吗

请注意,我处理的数据大约有100行,因此这不是完整的数据。你知道吗

编辑

使用@Abbas answer,它可以:

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])

Tags: csv数据namereadoutputdatanrsep
3条回答

您也只能使用而不是前面带有逗号的任意数量的空格作为分隔符,使用regex负lookback:

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个或更多空间作为分隔符:

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

添加以下图片以进行澄清:enter image description here

这会完成的

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

相关问题 更多 >