1

我有两个 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, Close, Volume, CloseFromSecondCsv

合并的.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')
4

2 回答 2

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)你预期的答案。

于 2013-07-09T19:48:57.567 回答
0

假设日期和时间列相同,您可以这样做

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

df = pd.merge(df1,df2)

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

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

于 2013-07-09T19:43:42.560 回答