将数据附加到Dataframe

时间:2016-09-11 10:46:19

标签: python pandas

我有一个目录,其中包含一些名为:

的csv文件
results_roll_3_oe_2016-02-04
results_roll_2_oe_2016-01-28

results_roll_3_oe_2016-02-04看起来像:

date           day_performance
2016-01-26   3.714011839374111
2016-01-27  -8.402334555591418
2016-01-28  -41.09889373400086

results_roll_2_oe_2016-01-28看起来像:

date           day_performance
2016-02-02   52.07647107113144
2016-02-03    -1.7503249876724
2016-02-04  -158.1667860104882

(实际上有更多的文件)。我试图查看将result_roll csv fies组合在一起的目录到一个数据帧中(所以我的最终输出看起来像):

date           day_performance
2016-01-26   3.714011839374111
2016-01-27  -8.402334555591418
2016-01-28  -41.09889373400086
2016-02-02   52.07647107113144
2016-02-03    -1.7503249876724
2016-02-04  -158.1667860104882

我编写了一些代码(如下所示),可以遍历文件并尝试将result_roll文件一起附加到新的数据框(dfs)中,但我得到以下输出:

date           day_performance
2016-02-02   52.07647107113144
2016-02-03    -1.7503249876724
2016-02-04  -158.1667860104882
date           day_performance
2016-02-02   52.07647107113144
2016-02-03    -1.7503249876724
2016-02-04  -158.1667860104882

它看起来正在接受result_roll_2并将数据与标题两次附加两次。

我的代码如下:

def main():

    dfs = pd.DataFrame()
    ResultsDataPath = 'C:/Users/stacey/Documents/data/VwapBacktestResults/'
    print(ResultsDataPath)

    allfiles = glob.glob(os.path.join(ResultsDataPath, "*oe*"))
    for fname in allfiles:    
        df = pd.read_csv(fname, header=None, usecols=[1,2], 
                        parse_dates=[0], dayfirst=True,
                        index_col=[0], names=['date', 'day_performance'])
        print(df)

        dfs = df.append(df,ignore_index=False)

我的确切CSV(results_roll_2_oe_2016-01-28)如下所示:

    date    day_performance
0   26/01/2016  3.714011839
1   27/01/2016  -8.402334556
2   28/01/2016  -41.09889373

和我的CSV(results_roll_3_oe_2016-02-04)如下所示:

    date    day_performance
0   02/02/2016  52.07647107
1   03/02/2016  -1.750324988
2   04/02/2016  -158.166786

它们都是MS excel逗号分隔值文件

1 个答案:

答案 0 :(得分:0)

更新:您的CSV文件以空格分隔或以TAB分隔,因此您必须指定它。除此之外,您的所有CSV文件都有一个标题行,并且只有两列,因此您无需使用usecolsheadernames参数:

In [100]: fmask = r'D:\temp\.data\results_roll_*'

In [101]: df = get_merged_csv(glob.glob(fmask),
   .....:                     delim_whitespace=True,
   .....:                     index_col=0)

In [102]: df['date'] = pd.to_datetime(df['date'], dayfirst=True)

In [103]: df
Out[103]:
        date  day_performance
0 2016-01-26         3.714012
1 2016-01-27        -8.402335
2 2016-01-28       -41.098894
3 2016-02-02        52.076471
4 2016-02-03        -1.750325
5 2016-02-04      -158.166786

OLD回答:

试试这个:

import glob
import pandas as pd

def get_merged_csv(flist, **kwargs):
    return pd.concat([pd.read_csv(f, **kwargs) for f in flist], ignore_index=True)

fmask = '/path/to/results_roll_*.csv'

df = get_merged_csv(glob.glob(fmask),
                    header=None, usecols=[1,2], 
                    parse_dates=[0], dayfirst=True,
                    index_col=[0], names=['date', 'day_performance'])