2013-07-09 33 views
1

我有两个CSV文件,Python 2.7版和熊猫合并2个CSV文件,与汇率数据

1:eurusd.csv 2:xauusd.csv

没有在文件中没有头,但数据日期时间,打开,高,低,关闭,音量。每个文件有以下类型的数据...

eurusd.csv:

02/23/2009 18:01,1.27090,1.27110,1.27040,1.27050,204 
02/23/2009 18:02,1.27060,1.27060,1.27000,1.27040,211 
02/23/2009 18:03,1.27040,1.27050,1.27010,1.27040,82 
02/23/2009 18:04,1.27020,1.27080,1.27020,1.27060,98 

xauusd.csv

02/23/2009 18:01,991.260,992.120,990.800,991.840,69 
02/23/2009 18:02,991.800,992.260,991.200,991.870,74 
02/23/2009 18:04,991.820,991.830,990.700,991.320,74 

我要合并基于日期时间列是数据两个文件中的第一列。正如你所看到的第二个文件没有与第一个文件完全相同的记录,所以从第二个文件中丢失了一些数据,但那就没问题。我想根据它们之间的匹配日期瓦片字段将第二个文件中的Close列移至​​第一个文件

所以最终合并的csv文件将具有以下列... Date Time,Open,High,Low,关闭,音量,CloseFromSecondCsv

merged.csv

02/23/2009 18:01,1.27090,1.27110,1.27040,1.27050,204,991.840 
02/23/2009 18:02,1.27060,1.27060,1.27000,1.27040,211,991.870 
02/23/2009 18:03,1.27040,1.27050,1.27010,1.27040,82,0 
02/23/2009 18:04,1.27020,1.27080,1.27020,1.27060,98,991.320 

即时通讯不知道如何做到这一点。由于事先根据TomAugspurger的回答


最后的工作代码:

import pandas as pd 
df1 = pd.read_csv("C:\IQFEED\XAUUSDO.COMP_1.csv", index_col=0, names=['time', 'open', 'high', 'low', 'close', 'volume'], parse_dates=True) 
df2 = pd.read_csv("C:\IQFEED\EURUSD.COMP_1.csv", index_col=0, names=['time', 'open', 'high', 'low', 'close', 'volume'], parse_dates=True) 
df2['other_close'] = df1['close'] 
df2.fillna(0) 
df2.to_csv('C:\IQFEED\python.csv') 

我想通了,只使用办法列数...

import pandas as pd 
df1 = pd.read_csv("C:\IQFEED\XAUUSD.txt", index_col=0, usecols=[0,4], parse_dates=True, header=None) 
df2 = pd.read_csv("C:\IQFEED\EURUSD.txt", index_col=0, usecols=[0,1,2,3,4,5], parse_dates=True, header=None) 
df2[6] = df1[4] 
df2.to_csv('C:\IQFEED\python1.csv') 
+1

他们打算在不同的日子(是一个错字)?我不明白这是怎么回事(为什么只复制Close值?) –

+0

Andy,对不起,这是我的错误。那是一个错字,我修正了它并编辑了原文。为什么只复制关闭值是因为我正在使用Altreva Adaptive Modeler,并且它允许基于单个仪器进行建模,并且最新版本允许您在建模中添加另一个数据点,因此我选择使用黄金关闭价格建模者。我只能使用单个附加列,否则不能使用第二个csv文件中的所有列,但现在只需关闭或列#4。 – killerkhan

回答

1

如果我正确理解你的问题,安迪在他的评论中有正确的想法。你不想合并到两个,你想复制一个到另一个的列。

In [48]: df1 = pd.read_csv(StringIO(b), index_col=0, names=['time', 'open', 'high', 'low', 'close', 'volume'], parse_dates=True) 


In [49]: df2 = pd.read_csv(StringIO(a), index_col=0, names=['time', 'open', 'high', 'low', 'close', 'volume'], parse_dates=True) 


In [71]: df1 
Out[71]: 
         open high low close volume 
time              
2009-02-23 18:01:00 991.26 992.12 990.8 991.84  69 
2009-02-23 18:02:00 991.80 992.26 991.2 991.87  74 
2009-02-23 18:04:00 991.82 991.83 990.7 991.32  74 

In [72]: df2 
Out[72]: 
         open high  low close volume 
time              
2009-02-23 18:01:00 1.2709 1.2711 1.2704 1.2705  204 
2009-02-23 18:02:00 1.2706 1.2706 1.2700 1.2704  211 
2009-02-23 18:03:00 1.2704 1.2705 1.2701 1.2704  82 
2009-02-23 18:04:00 1.2702 1.2708 1.2702 1.2706  98 





In [51]: df2['other_close'] = df1['close'] 


In [52]: df2 
Out[52]: 
         open high  low close volume other_close 
time                  
2009-02-23 18:01:00 1.2709 1.2711 1.2704 1.2705  204  991.84 
2009-02-23 18:02:00 1.2706 1.2706 1.2700 1.2704  211  991.87 
2009-02-23 18:03:00 1.2704 1.2705 1.2701 1.2704  82   NaN 
2009-02-23 18:04:00 1.2702 1.2708 1.2702 1.2706  98  991.32 

你可以做df2.fillna(0)以得到您的期望答案。

+0

这是我试过的: import pandas as pd df1 = pd.read_csv(“C:\ IQFEED \ XAUUSDO.COMP_1.csv”,index_col = 0,names = ['time','open','high' , '低', '关闭', '音量'],parse_dates =真) DF2 = pd.read_csv( “C:\ IQFEED \ EURUSD.COMP_1.csv”,index_col = 0,名字= [ '时间','开 ' '高', '低', '接近', '体积'],parse_dates =真) DF2 [ 'other_close'] = DF1 [ '关闭'] df2.to_csv(' C:\ IQFEED \蟒.csv',index = False) – killerkhan

+0

这是否适合你? – TomAugspurger

+0

谢谢,汤姆,那工作。我编辑了上面的最终工作代码。如果你能想到其他的东西来添加或删除代码,请让我知道。再次感谢 – killerkhan

0

假设日期时间列是相同的,你可以只做

df1 = pd.read_csv('file1',sep=r'\s+') 
df2 = pd.read_csv('file2',sep=r'\s+') 

df = pd.merge(df1,df2) 

它应该使用相同的列合并它们。

*假设我正确理解你的问题。

+0

Matt,上面的代码是否会根据行中的常见匹配日期时间合并两个csv文件?也只是将第二个csv文件中的close或column#4添加到合并文件中? – killerkhan

+0

如果我没有记错的话,它只会合并公共列,并添加所有独一无二的列。 – Matt