2016-05-01 5 views
0

私は2つのファイルを持っているとのデータフレームは、最初のものは、列名なしで、データフレームが含まれています一致列のリスト名

2008-03-13 15 56 0 25 
2008-03-14 10 32 27 45 
2008-03-16 40 8 54 35 
2008-03-18 40 8 63 30 
2008-03-19 45 32 81 25 

と日時のを除いて、列名のリストを含む別のファイルを、(次の形式での列):file.read()

リストの 出力(グループ、年齢、収入、場所)

私の実際のデータには、もっと多くの列と列の名前があります。データフレームの列は、リストの要素として順序付けられます。つまり、最初の列はGroupに、3番目はIncomeに、最後はLocaleに等しくなります。 私の目標は、データフレームの列にこのファイルに

with open(file2) as f: 
    list_of_columns=f.read() 
df=pd.read_csv(file1, sep='/t', names=list_of_columns) 

をし、私はすでに単語を削除して前処理の作業を想像: この操作は(日時列がリストに含まれていない、とリストはPythonの形式でフォーマットされていない)明白な理由のために動作しません。 Listと()をfile2の出力から削除し、列のdatetimeをリストの先頭に追加しますが、より洗練された迅速な解決策がある場合はお知らせください!

答えて

1

あなたはこのようにそれを行うことができます。

import re 

fn = r'D:\temp\.data\36972593_header.csv' 
with open(fn) as f: 
    data = f.read() 

# it will also tolerate if `List(...) is not in the first line` 
cols = ['Date'] + re.sub(r'.*List\((.*)\).*', r'\1', data, flags=re.S|re.I|re.M).replace(' ', '').split(',') 

fn = r'D:\temp\.data\36972593_data.csv' 
# this will also parse `Date` column as `datetime` 
df=pd.read_csv(fn, sep=r'\s+', names=cols, parse_dates=[0]) 

結果:

In [82]: df 
Out[82]: 
     Date Group Age Income Location 
0 2008-03-13  15 56  0  25 
1 2008-03-14  10 32  27  45 
2 2008-03-16  40 8  54  35 
3 2008-03-18  40 8  63  30 
4 2008-03-19  45 32  81  25 

In [83]: df.dtypes 
Out[83]: 
Date  datetime64[ns] 
Group    int64 
Age     int64 
Income    int64 
Location    int64 
dtype: object 
1

列名のリストは、まさにこの形式の文字列として来る場合、あなたができる:

with open(file2) as f: 
    list_of_columns=f.read() 
list_of_columns = ['date'] + list_of_columns[5:-1].split(',') 
list_of_columns = [l.strip() for l in list_of_columns] # remove leading/trailing whitespace 
df=pd.read_csv(file1, sep='/t', names=list_of_columns) 
関連する問題