2016-09-21 106 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 +'' –