2017-07-24 88 views
1

清一色大熊貓read_csv:頁眉/ skiprows不工作

第一次問一個問題在這裏,如果道歉格式是壞的,請讓我知道如何改進我的問題。

我在尋求更好的理解pandas.read_csv()函數的頭文件和skiprows參數。

這裏是原始數據,我想在python閱讀的例子:

MiniSonde 5 43656 
"Log File Name : lwrhyp_deploy_20170104" 
"Setup Date (MMDDYY) : 010417" 
"Setup Time (HHMMSS) : 114539" 
"Starting Date (MMDDYY) : 010417" 
"Starting Time (HHMMSS) : 140000" 
"Stopping Date (MMDDYY) : 123169" 
"Stopping Time (HHMMSS) : 235959" 
"Interval (HHMMSS) : 010000" 
"Sensor warmup (HHMMSS) : 000100" 
"Circltr warmup (HHMMSS) : 000030" 


"Date","Time","","Temp","","SpCond","","Sal","","Dep25","","TDG","","TDG","","LDO%","","LDO","","IBatt","" 
"MMDDYY","HHMMSS","","øC","","mS/cm","","ppt","","meters","","mmHg","","psia","","Sat","","mg/l","","Volts","" 

01/04/17,14:00:00,"",7.97,"",.0691,"",.02,"",.75,"",735,"",14.22,"",52.7,"",6.15,"",11.4,"" 
01/04/17,15:00:00,"",7.9,"",.0692,"",.02,"",.76,"",736,"",14.23,"",52.8,"",6.17,"",11.4,"" 
01/04/17,16:00:00,"",7.89,"",.0694,"",.02,"",.77,"",736,"",14.23,"",52.3,"",6.12,"",11.4,"" 
01/04/17,17:00:00,"",7.88,"",.0699,"",.02,"",.78,"",735,"",14.21,"",51.8,"",6.06,"",11.4,"" 
01/04/17,18:00:00,"",7.85,"",.0699,"",.02,"",.78,"",733,"",14.18,"",51.3,"",6.01,"",11.4,"" 
01/04/17,19:00:00,"",7.83,"",.0706,"",.02,"",.78,"",731,"",14.14,"",51.3,"",6.01,"",11.4,"" 
01/04/17,20:00:00,"",7.81,"",.0706,"",.02,"",.79,"",730,"",14.12,"",51.1,"",5.99,"",11.4,"" 
01/04/17,21:00:00,"",7.81,"",.0699,"",.02,"",.79,"",730,"",14.11,"",50.8,"",5.95,"",11.4,"" 
01/04/17,22:00:00,"",7.76,"",.0702,"",.02,"",.8,"",729,"",14.1,"",50.5,"",5.92,"",11.3,"" 
01/04/17,23:00:00,"",7.76,"",.0704,"",.02,"",.8,"",729,"",14.09,"",50.5,"",5.93,"",11.3,"" 
01/05/17,00:00:00,"",7.76,"",.07,"",.02,"",.8,"",729,"",14.09,"",50.5,"",5.92,"",11.3,"" 

我試圖爲使用該行以「日期」或「MMDDYY」爲開頭的行開始我標題行。當我在文本編輯器中打開原始數據時,對應於「Date」的行是第14行,它將是零索引python land中的第13行。

我用下面的代碼認爲它應該跳過第12行,並開始對13進行行讀取數據:

test = pd.read_csv(filepath, skiprows=12, skip_blank_lines=True) 

但產生錯誤:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf8 in position 0: invalid start byte 

很多後我發現下面的代碼產生了我之後的結果類型,但是我不明白它爲什麼有效:

test = pd.read_csv(filepath, skiprows=[14], header=11, skip_blank_lines=True) 

我不明白read_csv是如何計算行數的。我是不正確的,因爲標題行不在第11行,而是在第13行?該代碼只適用於如果skiprows = [14],爲什麼呢?

在附註中,是否有辦法阻止原始數據中存在的空白列被讀入數據框?

+0

我不認爲你需要有skiprows如果您使用的標題= 11 – jacoblaw

+0

有這樣的「O」字,其可能會導致這個問題。試試這個,test = pd.read_csv(filepath,encoding ='ISO-8859-1') –

+0

@VenkateshDurgumahanthi - 改變編碼是票!你能詳細說明爲什麼這有效嗎? –

回答

0

首先,skiprows沒有做你認爲它在這裏。當你給它一個列表作爲輸入時,它會在解析文件時跳過這些行。對於你想要的,只需使用header

二,熊貓對文件行進行零索引。

第三,當您有skip_blank_lines=True時,它會在考慮#header#值之前重新索引文件的行。因此,在您的示例中,它不會在您的標題(和標題之後的那一行)之前爲空行11和12編制索引。記住大熊貓零的索引文件的行,我們可以看到在標題header=11線燮如何:

line/ : content 
0:MiniSonde 5 43656 
1:"Log File Name : lwrhyp_deploy_20170104" 
2:"Setup Date (MMDDYY) : 010417" 
3:"Setup Time (HHMMSS) : 114539" 
4:"Starting Date (MMDDYY) : 010417" 
5:"Starting Time (HHMMSS) : 140000" 
6:"Stopping Date (MMDDYY) : 123169" 
7:"Stopping Time (HHMMSS) : 235959" 
8:"Interval (HHMMSS) : 010000" 
9:"Sensor warmup (HHMMSS) : 000100" 
10:"Circltr warmup (HHMMSS) : 000030" 


11:"Date","Time","","Temp","","SpCond","","Sal","","Dep25","","TDG","","TDG","","LDO%","","LDO","","IBatt","" 
12:"MMDDYY","HHMMSS","","øC","","mS/cm","","ppt","","meters","","mmHg","","psia","","Sat","","mg/l","","Volts","" 

13:01/04/17,14:00:00,"",7.97,"",.0691,"",.02,"",.75,"",735,"",14.22,"",52.7,"",6.15,"",11.4,"" 
14:01/04/17,15:00:00,"",7.9,"",.0692,"",.02,"",.76,"",736,"",14.23,"",52.8,"",6.17,"",11.4,"" 
15:01/04/17,16:00:00,"",7.89,"",.0694,"",.02,"",.77,"",736,"",14.23,"",52.3,"",6.12,"",11.4,"" 
16:01/04/17,17:00:00,"",7.88,"",.0699,"",.02,"",.78,"",735,"",14.21,"",51.8,"",6.06,"",11.4,"" 
17:01/04/17,18:00:00,"",7.85,"",.0699,"",.02,"",.78,"",733,"",14.18,"",51.3,"",6.01,"",11.4,"" 
18:01/04/17,19:00:00,"",7.83,"",.0706,"",.02,"",.78,"",731,"",14.14,"",51.3,"",6.01,"",11.4,"" 
19:01/04/17,20:00:00,"",7.81,"",.0706,"",.02,"",.79,"",730,"",14.12,"",51.1,"",5.99,"",11.4,"" 
20:01/04/17,21:00:00,"",7.81,"",.0699,"",.02,"",.79,"",730,"",14.11,"",50.8,"",5.95,"",11.4,"" 
21:01/04/17,22:00:00,"",7.76,"",.0702,"",.02,"",.8,"",729,"",14.1,"",50.5,"",5.92,"",11.3,"" 
22:01/04/17,23:00:00,"",7.76,"",.0704,"",.02,"",.8,"",729,"",14.09,"",50.5,"",5.93,"",11.3,"" 
23:01/05/17,00:00:00,"",7.76,"",.07,"",.02,"",.8,"",729,"",14.09,"",50.5,"",5.92,"",11.3,"" 
+0

爲了讓代碼正常工作,我爲什麼必須有skiprows = [14]?我怎樣才能使'MMDDYY'開頭的行是標題行? –

+0

我不需要它,所以不知道爲什麼會這樣。 'df = pd.read_csv(「test.txt」,header = 11,skip_blank_lines = True)'對我來說工作正常。 – jacoblaw