我有一个目录,其中包含一些名为:
的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逗号分隔值文件
答案 0 :(得分:0)
更新:您的CSV文件以空格分隔或以TAB分隔,因此您必须指定它。除此之外,您的所有CSV文件都有一个标题行,并且只有两列,因此您无需使用usecols
,header
,names
参数:
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'])