2. 连接多个DataFrame

  1. # 读取stocks_2016和stocks_2017两个数据集,用Symbol作为行索引名
  2. In[21]: stocks_2016 = pd.read_csv('data/stocks_2016.csv', index_col='Symbol')
  3. stocks_2017 = pd.read_csv('data/stocks_2017.csv', index_col='Symbol')
  4. In[22]: stocks_2016
  5. Out[22]:

2. 连接多个DataFrame - 图1

  1. In[23]: stocks_2017
  2. Out[23]:

2. 连接多个DataFrame - 图2

  1. # 将两个DataFrame放到一个列表中,用pandas的concat方法将它们连接起来
  2. In[24]: s_list = [stocks_2016, stocks_2017]
  3. pd.concat(s_list)
  4. Out[24]:

2. 连接多个DataFrame - 图3

  1. # keys参数可以给两个DataFrame命名,该标签会出现在行索引的最外层,会生成多层索引,names参数可以重命名每个索引层
  2. In[25]: pd.concat(s_list, keys=['2016', '2017'], names=['Year', 'Symbol'])
  3. Out[25]:

2. 连接多个DataFrame - 图4

  1. # 也可以横向连接。只要将axis参数设为columns或1
  2. In[26]: pd.concat(s_list, keys=['2016', '2017'], axis='columns', names=['Year', None])
  3. Out[26]:

2. 连接多个DataFrame - 图5

  1. # concat函数默认使用的是外连接,会保留每个DataFrame中的所有行。也可以通过设定join参数,使用内连接:
  2. In[27]: pd.concat(s_list, join='inner', keys=['2016', '2017'], axis='columns', names=['Year', None])
  3. Out[27]:

2. 连接多个DataFrame - 图6

更多

  1. # append是concat方法的超简化版本,append内部其实就是调用concat。前本节的第二个例子,pd.concat也可以如下实现:
  2. In[28]: stocks_2016.append(stocks_2017)
  3. Out[28]:

2. 连接多个DataFrame - 图7

  1. # 原书没有下面三行代码
  2. In[29]: stocks_2015 = stocks_2016.copy()
  3. In[30]: stocks_2017
  4. Out[30]:

2. 连接多个DataFrame - 图8