2016-04-06 51 views
2

我有一个包含14行标题的数据文件。在标题中,有纬度 - 经度坐标和时间的元数据。我目前使用使用Pandas从csv文件中读取标题信息

pandas.read_csv(filename, delimiter",", header=14) 

在文件中读取,但是这只是获取数据,我似乎无法得到的元数据。有人会知道如何阅读标题中的信息吗?标题是这样的:

CSD,20160315SSIO 
NUMBER_HEADERS = 11 
EXPOCODE = 33RR20160208 
SECT_ID = I08 
STNBBR = 1 
CASTNO = 1 
DATE = 20160219 
TIME = 0558 
LATITUDE = -66.6027 
LONGITUDE = 78.3815 
DEPTH = 462 
INSTRUMENT_ID = 0401 
CTDPRS,CTDPRS_FLAG,CTDTMP,CTDTMP_FLAG 
DBAR,,ITS-90,,PSS-78 
+0

'read_csv()'有一个['header'(http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html)选项,以便您可以填充生成的数据框以标题作为列名。这是你想要的? –

+0

也许你应该使用'header = range(14)'?因为使用'header = 14',你只能使用行14作为标题并跳过1-13行。 –

+1

标题的格式是什么?你应该发布一个看起来像样的例子。您可能无法使用'pandas.read_csv'来读取它,因为没有用于csv的标准元数据格式,您可能需要编写一些自定义代码。 – Marius

回答

0

尽管以下方法不使用熊猫,但我能够提取标题信息。

with open(fname) as csvfile: 
    forheader_IO2016 = csv.reader(csvfile, delimiter=',') 
    header_IO2016 = [] 
    for row in forheader_IO2016: 
     header_IO2016.append(row[0]) 

date = header_IO2016[7].split(" ")[2] 
time = header_IO2016[8].split(" ")[2] 
lat = float(header_IO2016[9].split(" ")[2]) 
lon = float(header_IO2016[10].split(" ")[4]) 
1

你必须自己来解析你的元数据头,但你可以一次做,在一个优雅的方式,甚至利用它的飞行,这样就可以提取出它的数据/控制文件等

第一的正确性,自己打开文件:

f = open(filename) 

然后,做的工作来分析每个元数据行提取数据出来了。为了解释方便,我只是跳过这些行:

for i in range(13): # skip the first 13 lines that are useless for the columns definition 
    f.readline() # use the resulting string for metadata extraction 

现在你有文件指针上要使用加载数据框独特的标题行准备。很酷的事情是,read_csv接受文件对象!因此,你开始加载您的数据帧就现在:

pandas.read_csv(f, sep=",") 

需要注意的是,我通过你的描述考虑我不使用头参数,你有头的只有一个最后一行是为您的数据框非常有用。您可以构建并调整听众解析值/行以跳过该示例。