簡體   English   中英

讀取具有多於1個條目的列的數據

[英]read data having a column with more than 1 entry

我想閱讀以下數據

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

試試這個,只考慮2個或更多空格作為分隔符:

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

添加了以下圖像以便澄清: 在此輸入圖像描述

您還可以使用任何數量的前面沒有逗號的空格作為分隔符,使用正則表達式負向lookbehind:

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(","))

這將完成它

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM