pd.read_csv忽略没有标题

时间:2016-09-21 16:29:27

标签: python csv pandas

我有一个由第三方程序生成的.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行,A-E列)但共有11列(第1行F-K为空,第2-N行包含A-K列的浮点值)

我不确定如何粘贴.csv行,因此它们很容易复制,对不起。 excel表的图像显示在此处:Excel sheet to read in

当我使用以下代码时:

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

或:

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

结果数据框FWInds不包含最后6列 - 它只包含带有标题的列(来自excel的列A-E,作为索引值的列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很新。

2 个答案:

答案 0 :(得分: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:])

答案 1 :(得分:2)

有几个参数可以传递给pd.read_csv()

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

有了这个,我实际上可以很好地导入你的数据(之后可以通过例如df['K']访问)。