如何在Python中按多个列合并2个CSV文件

2024-09-27 19:21:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个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如:

^{pr2}$

句点表示文件1文件2的每个ticker的大量条目的值继续。第一个文件包含每个日期的所有值,每个股票代码都连续地列在一行中,而第二个文件包含每年的所有值,股票代码一个接一个地列出。在

我要做的是合并基于“Ticker”和“Date”的文件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')

但我不认为这能同时解释日期和股票行情。在


Tags: 文件csv目的readdateadpd股票代码
3条回答

试试这个:

 merged=a.merge(b, how='left',on=['Ticker', 'Date'])

您可以尝试以下代码:

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是:

^{pr2}$

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

我相信您需要使用['Date', 'Ticker'],而不是仅仅使用'Date'。另外,您可能需要根据需要指定how参数。在

相关问题 更多 >

    热门问题