使用pandas读入文本文件,并将行作为列名称

时间:2017-09-23 22:38:05

标签: python python-3.x pandas dataframe

我正在研究一个项目来读取一个由用户生成的可变长度的文本文件。文本文件的开头有几条注释,其中一条需要用作列名。我知道可以用genfromtxt()做到这一点,但我需要使用pandas。以下是示例文本文件的开头:

#GeneratedFile
#This file will be generated by a user
#a b c d f g h i j k l m n p q r s t v w x y z
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

我需要#a,b,c,...作为列名。我尝试了以下代码行来读取数据并将其更改为数组,但它只返回行并忽略列名。

import pandas as pd    
data = pd.read_table('example.txt',header=2)    
d = pd.DataFrame.as_matrix(data)

有没有办法在不使用genfromtxt()的情况下执行此操作?

1 个答案:

答案 0 :(得分:0)

一种方法可能是尝试以下方法:

df = pd.read_csv('example.txt', sep='\s+', engine='python', header=2)

# the first column name become #a so, replacing the column name
df.rename(columns={'#a':'a'}, inplace=True)

# alternatively, other way is to replace # from all the column names
#df.columns = [column_name.replace('#', '') for column_name in df.columns]
print(df)

结果:

   a  b  c  d  f  g  h  i  j   k ...   p   q   r   s   t   v   w   x   y   z
0  0  1  2  3  4  5  6  7  8   9 ...  13  14  15  16  17  18  19  20  21  22
1  1  2  3  4  5  6  7  8  9  10 ...  14  15  16  17  18  19  20  21  22  23

[2 rows x 23 columns]