2016-09-21 97 views
3

我有一個由第三方程序生成的.csv文件。該文件中的數據是在以下格式:pd.read_csv忽略沒有標題的列

%m/%d/%Y 49.78 85 6 15      
03/01/1984 6.63368 82 7 9.8 34.29056405 2.79984079 2.110346498 0.014652412 2.304545521 0.004732732 
03/02/1984 6.53368 68 0 0.2 44.61471002 3.21623666 2.990408898 0.077444779 2.793385466 0.02661873 
03/03/1984 4.388344 55 6 0 61.14463457 3.637231063 3.484310818 0.593098236 3.224973641 0.214360796 

有5個標題(在Excel行1,列AE),但11列總共(行1列FK是空的,行2-N包含浮動值爲列AK)

我不知道如何粘貼.csv行,以便他們很容易複製,對不起。 Excel表單的圖像被如下所示:Excel sheet to read in

當我使用以下代碼:

FWInds=pd.read_csv("path.csv") 

或:

FWInds=pd.read_csv("path.csv", header=None) 

所得數據幀FWInds不包含在過去的6列 - 它只包含帶標題的列(來自excel的列AE,列A作爲索引值)。

FWIDat.shape 
Out[48]: (245, 4) 

最終在過去的6列是唯一我甚至要讀

我也試過:

FWInds=pd.read_csv('path,csv', header=None, index_col=False) 

而且得到了以下錯誤

CParserError: Error tokenizing data. C error: Expected 5 fields in line 2, saw 11 

我也試圖忽略列標題不重要的第一行:

FWInds=pd.read_csv('path.csv', header=None, skiprows=0) 

但得到相同的錯誤。

還沒有運氣與「usecols」參數,它似乎並不明白,我指的是列號(不是名稱),除非我做錯了:

FWInds=pd.read_csv('path.csv', header=None, usecols=[5,6,7,8,9,10]) 

有小費嗎?我相信這是一個簡單的解決方案,但我對python很陌生。

+0

所以,你想保留列F→K,並放棄前5列? –

+0

是的。雖然如果我可以在所有列中閱讀,我可以在python中輕鬆完成。無論哪種方式工作。 – Kingle

回答

2

有幾個參數,這些參數可以傳遞給pd.read_csv()

import pandas as pd 
colnames = list('ABCDEFGHIKL') 
df = pd.read_csv('test.csv', sep='\t', names=colnames) 

有了這個,其實我可以導入你的數據相當精細(和它之後可通過例如df['K']訪問)。

+0

這個工作除了我需要使用sep =「,」.......這是我自己的錯,因爲我直接從excel中的.csv複製數據到問題的方式。 – Kingle

2

你可以做到這一點,如下所示:

col_name = list('ABCDEFGHIJK') 
data = 'path.csv' 
pd.read_csv(data, delim_whitespace=True, header=None, names=col_name, usecols=col_name[5:]) 

Image

要閱讀所有從A→k爲列,簡單地忽略usecols參數。


數據:

data = StringIO(
''' 
%m/%d/%Y,49.78,85,6,15      
03/01/1984,6.63368,82,7,9.8,34.29056405,2.79984079,2.110346498,0.014652412,2.304545521,0.004732732 
03/02/1984,6.53368,68,0,0.2,44.61471002,3.21623666,2.990408898,0.077444779,2.793385466,0.02661873 
03/03/1984,4.388344,55,6,0,61.14463457,3.637231063,3.484310818,0.593098236,3.224973641,0.214360796 
''') 

col_name = list('ABCDEFGHIJK') 
pd.read_csv(data, header=None, names=col_name, usecols=col_name[5:]) 
+0

這會產生一個錯誤:指定的列過多:期望11和找到1.如果我省略usecols參數,它可以工作,但數據框內的值全部爲nan – Kingle

+0

它對您提供的數據正常工作。這個錯誤主要是由於'sep'與數據格式不匹配造成的。 –

+0

嘗試使用'sep'參數進行播放並根據您的格式調整它,就像'sep ='\ s +'' –