2015-02-11 109 views
0

我使用的文本文件包含前6行中的一些基本信息,包括空行。我必须导入,处理并将数据导出到另一个csv。这是第一个6行的一个示例:熊猫 - read_table读取选定的行

Foov7.9 - bar.raw created at 10:45:25 on 10.02.2015: 
(empty row) 
(empty row) 
A B C D 
a b c d 
(empty row) 

在熊猫我使用4行:

A B C D 

作为用于数据帧报头:

data1 = pd.read_table(dataset1,header = 1, skiprows = (4,5), index_col=None, delimiter=r"\t", engine='python') 

当处理后写入to_csv我现在想要放回前6行的数据,但是在读取行时我已经失败。通过将第4行的头文件单独写入csv,我将失去所有附加信息。 如何读取这些行并稍后将其放回到csv中而不干扰数据帧头?

+0

行5和行6是否应该包含在数据体中?速度优化至关重要? – Klaster 2015-02-11 15:00:30

+0

对于处理,我使用A B C D(即第4行)作为colindex。然而,在数据主体开始于第7行之前,行1(一般信息),2和3(均为空),4(当前colindex)5(即colindex的单位)和6(空)应位于后面的输出文件中。不管... – mati 2015-02-11 19:13:59

+0

好的,理解。看到我的答案为解决方案。反馈赞赏! :) – Klaster 2015-02-13 14:09:18

回答

0

有最有可能是一个更整洁的方式做到这一点,但它的工作原理,它只能读取数据一次,对性能:

(1)读取数据

in_df = pd.read_excel("test.xls", header=0) 

(2)创建为一个头以后

header = in_df[:5] #only first rows 

(3)保存的concat以后

cols = list(header.columns.values) #a list with headers 
的标题列

(4),用于数据处理创建一个副本

data = in_df 
data.rename(columns=in_df.iloc[2,:], inplace=True) # rename your columns 
data = data[5:]     # you want just the data body 
data = data.reset_index(drop = True) # reindex 

#DO WHATEVER WITH DATA 

(5)输出:CONCAT [头&数据。写输出

data.columns = cols  # we need the old col names for concat 
out_df = pd.concat([header,data]) # do the concat 
out_df = out_df.reset_index(drop = True) # reset index (if you want to) 
out_df.to_csv("out.csv") #write it. out_df.to_csv("out.csv", index = False) if you don't want index in output