1

私は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

両方のファイルの最初の列である日時列に基づいてデータをマージしたいと考えています。ご覧のとおり、2 番目のファイルには最初のファイルとまったく同じレコードが含まれていないため、2 番目のファイルの一部のデータが欠落していますが、問題ありません。それらの間の一致する日付タイル フィールドに基づいて、2 番目のファイルから最初のファイルに 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

私があなたの質問を正しく理解していれば、アンディは彼のコメントで正しい考えを持っていました. 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 に答える