Как объединить 2 CSV-файла в несколько столбцов в Python - PullRequest
0 голосов
/ 17 мая 2018

У меня есть два файла CSV. Файл 1 , который выглядит следующим образом:

Ticker  |    Date     |   Marketcap 
  A     |  2002-03-14 |    600000
  A     |  2002-06-18 |    520000
                   .
                   .
  ABB   |  2004-03-16 |    400000
  ABB   |  2005-07-11 |    800000
                   .
                   .
  AD    |  2004-03-16 |    680000
                   .
                   .

Файл 2 как:

Ticker  |    Date     |     Open    |    Close   |
  A     |  2002-03-14 |    580000   |    500000  |
  ABB   |  2002-03-14 |    500000   |    420000  |
  AD    |  2002-03-16 |    700000   |    670000  |
                          .
                          .
                          .
                          .

Точки указывают, что значения продолжаются для большого количества записей для каждого тикера как для Файл 1 , так и Файл 2 . В первом файле есть все значения для каждой даты, и каждый тикер перечислен в одной строке непрерывно, тогда как во втором файле есть все значения для каждого года, и тикер перечислен один за другим.

Что я хочу сделать, так это объединить файлы 1 и 2, основанные на «Тикере» и «Дате», чтобы выглядеть следующим образом:

Ticker  |    Date     |   Marketcap |    Open     |    Close   |
  A     |  2002-03-14 |    600000   |    580000   |    500000  |
  ABB   |  2002-03-14 |    520000   |    500000   |    420000  |
                                 .
                                 .

Я попытался объединить файлы, используя что-то вроде:

a = pd.read_csv("File1.csv")
b = pd.read_csv("File2.csv")
merged = a.merge(b, on='Date')

Но я не думаю, что это учитывает и Дату, и Тикер одновременно.

Ответы [ 3 ]

0 голосов
/ 17 мая 2018

Попробуйте это:

 merged=a.merge(b, how='left',on=['Ticker', 'Date'])
0 голосов
/ 17 мая 2018

Вы можете попробовать следующий код:

a = pd.read_csv("File1.csv", "\t")
b = pd.read_csv("File2.csv", "\t")
merged = pd.merge(a, b, how='inner', on=['Ticker', 'Date'])
print merged

Если File1.csv:

Ticker  Date    Marketcap 
A   2002-03-14  600000
A   2002-06-18  520000
ABB 2004-03-16  400000
ABB 2005-07-11  800000
AD  2004-03-16  680000

А File2.csv составляет:

Ticker  Date    Open    Close
A   2002-03-14  580000  500000
ABB 2004-03-16  500000  420000
AD  2004-03-16  700000  670000

Тогда результат вышеприведенного кода будет:

  Ticker        Date  Marketcap     Open   Close
0      A  2002-03-14      600000  580000  500000
1    ABB  2004-03-16      400000  500000  420000
2     AD  2004-03-16      680000  700000  670000


Если вам нужны все строки из File1.csv и только соответствующие строки из File2.csv, вы можете использовать это вместо:
merged = pd.merge(a, b, how='left', on=['Ticker', 'Date'])

Это даст:

  Ticker        Date  Marketcap       Open     Close
0      A  2002-03-14      600000  580000.0  500000.0
1      A  2002-06-18      520000       NaN       NaN
2    ABB  2004-03-16      400000  500000.0  420000.0
3    ABB  2005-07-11      800000       NaN       NaN
4     AD  2004-03-16      680000  700000.0  670000.0
0 голосов
/ 17 мая 2018

Полагаю, вам нужно использовать ['Date', 'Ticker'] вместо 'Date'. Также вам может потребоваться указать аргумент how в зависимости от того, что вы хотите.

...