Pandas中concat连接多个DataFrame

import pandas
# 读取stocks_2016和stocks_2017两个数据集,用Symbol作为行索引名
stocks_2016 = pd.read_csv('data/stocks_2016.csv', index_col='Symbol')
stocks_2017 = pd.read_csv('data/stocks_2017.csv', index_col='Symbol')
stocks_2016
  Shares Low High
Symbol      
AAPL 80 95 110
TSLA 50 80 130
WMT 40 55 70
stocks_2017
  Shares Low High
Symbol      
AAPL 50 120 140
GE 100 30 40
IBM 87 75 95
SLB 20 55 85
TXN 500 15 23
TSLA 100 100 300

将两个DataFrame放到一个列表中,用pandas的concat方法将它们连接起来 

s_list = [stocks_2016, stocks_2017]
pd.concat(s_list)
  Shares Low High
Symbol      
AAPL 80 95 110
TSLA 50 80 130
WMT 40 55 70
AAPL 50 120 140
GE 100 30 40
IBM 87 75 95
SLB 20 55 85
TXN 500 15 23
TSLA 100 100 300
# keys参数可以给两个DataFrame命名,该标签会出现在行索引的最外层,
会生成多层索引(multiIndex),names参数可以重命名每个索引层
pd.concat(s_list, keys=['2016', '2017'], names=['Year', 'Symbol'])
# keys参数可以给两个DataFrame命名,该标签会出现在行索引的最外层,会生成多层索引(multiIndex),names参数可以重命名每个索引层
pd.concat(s_list, keys=['2016', '2017'], names=['Year', 'Symbol'])
    Shares Low High
Year Symbol      
2016 AAPL 80 95 110
TSLA 50 80 130
WMT 40 55 70
2017 AAPL 50 120 140
GE 100 30 40
IBM 87 75 95
SLB 20 55 85
TXN 500 15 23
TSLA 100 100 300
# 也可以横向连接。只要将axis参数设为columns或1
pd.concat(s_list, keys=['2016', '2017'], axis='columns', names=['Year', None])
Year 2016 2017
  Shares Low High Shares Low High
AAPL 80.0 95.0 110.0 50.0 120.0 140.0
TSLA 50.0 80.0 130.0 100.0 100.0 300.0
WMT 40.0 55.0 70.0 NaN NaN NaN
GE NaN NaN NaN 100.0 30.0 40.0
IBM NaN NaN NaN 87.0 75.0 95.0
SLB NaN NaN NaN 20.0 55.0 85.0
TXN NaN NaN NaN 500.0 15.0 23.0
# concat函数默认使用的是外连接,会保留每个DataFrame中的所有行。也可以通过设定join参数,使用内连接:
pd.concat(s_list, join='inner', keys=['2016', '2017'], axis='columns', names=['Year', None])
Year 2016 2017
  Shares Low High Shares Low High
Symbol            
AAPL 80 95 110 50 120 140
TSLA 50 80 130 100 100 300

append拼接DataFrame

# append是concat方法的超简化版本,append内部其实就是调用concat。pd.concat也可以
stocks_2016.append(stocks_2017)
  Shares Low High
Symbol      
AAPL 80 95 110
TSLA 50 80 130
WMT 40 55 70
AAPL 50 120 140
GE 100 30 40
IBM 87 75 95
SLB 20 55 85
TXN 500 15 23
TSLA 100 100 300
#copy() 函数返回一个字典的浅复制。
stocks_2015 = stocks_2016.copy() #Python 字典(Dictionary) copy() 函数返回一个字典的浅复制。浅复制是指当对象的字段值被复制时,字段引用的对象不会被复制
stocks_2015
  Shares Low High
Symbol      
AAPL 80 95 110
TSLA 50 80 130
WMT 40 55 70

猜你喜欢

转载自blog.csdn.net/weixin_48135624/article/details/113993408