import numpy as np
import pandas as pd
from pandas import Series, DataFrame, MultiIndex
数据级联
将两个DataFrame或Series进行拼接,按索引标签对齐
pd.conncat() 列拼接 pd.append() 行拼接
df1 = DataFrame( np. random. randint( 1 , 150 , size= ( 6 , 3 ) ) , [ '甲' , '乙' , '丙' , '丁' , '戊' , '己' ] , [ 'Python' , 'Flask' , 'FastAPI' ] )
df2 = DataFrame( np. random. randint( 1 , 150 , size= ( 6 , 3 ) ) , [ '甲' , '乙' , '丙' , '丁' , 'A' , 'B' ] , [ 'Python' , 'Tornado' , 'Pulsar' ] )
display( df1, df2)
Python Flask FastAPI 甲 86 91 125 乙 114 73 41 丙 20 90 37 丁 96 84 134 戊 47 78 22 己 80 43 90
Python Tornado Pulsar 甲 13 29 3 乙 103 12 81 丙 21 101 62 丁 24 26 121 A 76 106 134 B 33 23 104
"""
pd.concat(
objs,
axis=0,
join='outer',
join_axes=None,
ignore_index=False,
keys=None,
levels=None,
names=None,
verify_integrity=False,
sort=None,
copy=True,
)
"""
pd. concat( ( df1, df2) , sort= False )
Python Flask FastAPI Tornado Pulsar 甲 86 91.0 125.0 NaN NaN 乙 114 73.0 41.0 NaN NaN 丙 20 90.0 37.0 NaN NaN 丁 96 84.0 134.0 NaN NaN 戊 47 78.0 22.0 NaN NaN 己 80 43.0 90.0 NaN NaN 甲 13 NaN NaN 29.0 3.0 乙 103 NaN NaN 12.0 81.0 丙 21 NaN NaN 101.0 62.0 丁 24 NaN NaN 26.0 121.0 A 76 NaN NaN 106.0 134.0 B 33 NaN NaN 23.0 104.0
pd. concat( ( df1, df2) , join= 'inner' , sort= False )
Python 甲 86 乙 114 丙 20 丁 96 戊 47 己 80 甲 13 乙 103 丙 21 丁 24 A 76 B 33
"""
ignore_index : bool, default False
If True, do not use the index values along the concatenation axis. The
resulting axis will be labeled 0, ..., n - 1. This is useful if you are
concatenating objects where the concatenation axis does not have
meaningful indexing information. Note the index values on the other
axes are still respected in the join.
"""
pd. concat( ( df1, df2) , join= 'inner' , ignore_index= True , sort= False )
Python 0 86 1 114 2 20 3 96 4 47 5 80 6 13 7 103 8 21 9 24 10 76 11 33
pd. concat( ( df1, df2) , join= 'outer' , ignore_index= False , sort= False )
Python Flask FastAPI Tornado Pulsar 甲 86 91.0 125.0 NaN NaN 乙 114 73.0 41.0 NaN NaN 丙 20 90.0 37.0 NaN NaN 丁 96 84.0 134.0 NaN NaN 戊 47 78.0 22.0 NaN NaN 己 80 43.0 90.0 NaN NaN 甲 13 NaN NaN 29.0 3.0 乙 103 NaN NaN 12.0 81.0 丙 21 NaN NaN 101.0 62.0 丁 24 NaN NaN 26.0 121.0 A 76 NaN NaN 106.0 134.0 B 33 NaN NaN 23.0 104.0
pd. concat( ( df1, df2) , join= 'outer' , ignore_index= False , keys= [ '期中' , '期末' ] , sort= False )
Python Flask FastAPI Tornado Pulsar 期中 甲 86 91.0 125.0 NaN NaN 乙 114 73.0 41.0 NaN NaN 丙 20 90.0 37.0 NaN NaN 丁 96 84.0 134.0 NaN NaN 戊 47 78.0 22.0 NaN NaN 己 80 43.0 90.0 NaN NaN 期末 甲 13 NaN NaN 29.0 3.0 乙 103 NaN NaN 12.0 81.0 丙 21 NaN NaN 101.0 62.0 丁 24 NaN NaN 26.0 121.0 A 76 NaN NaN 106.0 134.0 B 33 NaN NaN 23.0 104.0
df3 = pd. concat( ( df1, df2) , join= 'outer' , ignore_index= False , keys= [ '期中' , '期末' ] , sort= False )
df3
Python Flask FastAPI Tornado Pulsar 期中 甲 86 91.0 125.0 NaN NaN 乙 114 73.0 41.0 NaN NaN 丙 20 90.0 37.0 NaN NaN 丁 96 84.0 134.0 NaN NaN 戊 47 78.0 22.0 NaN NaN 己 80 43.0 90.0 NaN NaN 期末 甲 13 NaN NaN 29.0 3.0 乙 103 NaN NaN 12.0 81.0 丙 21 NaN NaN 101.0 62.0 丁 24 NaN NaN 26.0 121.0 A 76 NaN NaN 106.0 134.0 B 33 NaN NaN 23.0 104.0
df4 = df3. copy( )
df4
Python Flask FastAPI Tornado Pulsar 期中 甲 86 91.0 125.0 NaN NaN 乙 114 73.0 41.0 NaN NaN 丙 20 90.0 37.0 NaN NaN 丁 96 84.0 134.0 NaN NaN 戊 47 78.0 22.0 NaN NaN 己 80 43.0 90.0 NaN NaN 期末 甲 13 NaN NaN 29.0 3.0 乙 103 NaN NaN 12.0 81.0 丙 21 NaN NaN 101.0 62.0 丁 24 NaN NaN 26.0 121.0 A 76 NaN NaN 106.0 134.0 B 33 NaN NaN 23.0 104.0
pd. concat( ( df3, df4) , levels= [ '期中' , '期末' ] , axis= 1 )
Python Flask FastAPI Tornado Pulsar Python Flask FastAPI Tornado Pulsar 期中 甲 86 91.0 125.0 NaN NaN 86 91.0 125.0 NaN NaN 乙 114 73.0 41.0 NaN NaN 114 73.0 41.0 NaN NaN 丙 20 90.0 37.0 NaN NaN 20 90.0 37.0 NaN NaN 丁 96 84.0 134.0 NaN NaN 96 84.0 134.0 NaN NaN 戊 47 78.0 22.0 NaN NaN 47 78.0 22.0 NaN NaN 己 80 43.0 90.0 NaN NaN 80 43.0 90.0 NaN NaN 期末 甲 13 NaN NaN 29.0 3.0 13 NaN NaN 29.0 3.0 乙 103 NaN NaN 12.0 81.0 103 NaN NaN 12.0 81.0 丙 21 NaN NaN 101.0 62.0 21 NaN NaN 101.0 62.0 丁 24 NaN NaN 26.0 121.0 24 NaN NaN 26.0 121.0 A 76 NaN NaN 106.0 134.0 76 NaN NaN 106.0 134.0 B 33 NaN NaN 23.0 104.0 33 NaN NaN 23.0 104.0
pd. concat( ( df3, df4) , axis= 1 )
Python Flask FastAPI Tornado Pulsar Python Flask FastAPI Tornado Pulsar 期中 甲 86 91.0 125.0 NaN NaN 86 91.0 125.0 NaN NaN 乙 114 73.0 41.0 NaN NaN 114 73.0 41.0 NaN NaN 丙 20 90.0 37.0 NaN NaN 20 90.0 37.0 NaN NaN 丁 96 84.0 134.0 NaN NaN 96 84.0 134.0 NaN NaN 戊 47 78.0 22.0 NaN NaN 47 78.0 22.0 NaN NaN 己 80 43.0 90.0 NaN NaN 80 43.0 90.0 NaN NaN 期末 甲 13 NaN NaN 29.0 3.0 13 NaN NaN 29.0 3.0 乙 103 NaN NaN 12.0 81.0 103 NaN NaN 12.0 81.0 丙 21 NaN NaN 101.0 62.0 21 NaN NaN 101.0 62.0 丁 24 NaN NaN 26.0 121.0 24 NaN NaN 26.0 121.0 A 76 NaN NaN 106.0 134.0 76 NaN NaN 106.0 134.0 B 33 NaN NaN 23.0 104.0 33 NaN NaN 23.0 104.0
pd. concat( ( df3, df4) , levels= [ '中' , '末' ] , axis= 1 )
Python Flask FastAPI Tornado Pulsar Python Flask FastAPI Tornado Pulsar 期中 甲 86 91.0 125.0 NaN NaN 86 91.0 125.0 NaN NaN 乙 114 73.0 41.0 NaN NaN 114 73.0 41.0 NaN NaN 丙 20 90.0 37.0 NaN NaN 20 90.0 37.0 NaN NaN 丁 96 84.0 134.0 NaN NaN 96 84.0 134.0 NaN NaN 戊 47 78.0 22.0 NaN NaN 47 78.0 22.0 NaN NaN 己 80 43.0 90.0 NaN NaN 80 43.0 90.0 NaN NaN 期末 甲 13 NaN NaN 29.0 3.0 13 NaN NaN 29.0 3.0 乙 103 NaN NaN 12.0 81.0 103 NaN NaN 12.0 81.0 丙 21 NaN NaN 101.0 62.0 21 NaN NaN 101.0 62.0 丁 24 NaN NaN 26.0 121.0 24 NaN NaN 26.0 121.0 A 76 NaN NaN 106.0 134.0 76 NaN NaN 106.0 134.0 B 33 NaN NaN 23.0 104.0 33 NaN NaN 23.0 104.0
pd. concat( ( df3, df4) , axis= 1 )
Python Flask FastAPI Tornado Pulsar Python Flask FastAPI Tornado Pulsar 期中 甲 86 91.0 125.0 NaN NaN 86 91.0 125.0 NaN NaN 乙 114 73.0 41.0 NaN NaN 114 73.0 41.0 NaN NaN 丙 20 90.0 37.0 NaN NaN 20 90.0 37.0 NaN NaN 丁 96 84.0 134.0 NaN NaN 96 84.0 134.0 NaN NaN 戊 47 78.0 22.0 NaN NaN 47 78.0 22.0 NaN NaN 己 80 43.0 90.0 NaN NaN 80 43.0 90.0 NaN NaN 期末 甲 13 NaN NaN 29.0 3.0 13 NaN NaN 29.0 3.0 乙 103 NaN NaN 12.0 81.0 103 NaN NaN 12.0 81.0 丙 21 NaN NaN 101.0 62.0 21 NaN NaN 101.0 62.0 丁 24 NaN NaN 26.0 121.0 24 NaN NaN 26.0 121.0 A 76 NaN NaN 106.0 134.0 76 NaN NaN 106.0 134.0 B 33 NaN NaN 23.0 104.0 33 NaN NaN 23.0 104.0
pd. concat( ( df3, df4) , axis= 1 , keys= [ '2019年的第一学期' , '2019年的第二学期' ] )
2019年的第一学期 2019年的第二学期 Python Flask FastAPI Tornado Pulsar Python Flask FastAPI Tornado Pulsar 期中 甲 86 91.0 125.0 NaN NaN 86 91.0 125.0 NaN NaN 乙 114 73.0 41.0 NaN NaN 114 73.0 41.0 NaN NaN 丙 20 90.0 37.0 NaN NaN 20 90.0 37.0 NaN NaN 丁 96 84.0 134.0 NaN NaN 96 84.0 134.0 NaN NaN 戊 47 78.0 22.0 NaN NaN 47 78.0 22.0 NaN NaN 己 80 43.0 90.0 NaN NaN 80 43.0 90.0 NaN NaN 期末 甲 13 NaN NaN 29.0 3.0 13 NaN NaN 29.0 3.0 乙 103 NaN NaN 12.0 81.0 103 NaN NaN 12.0 81.0 丙 21 NaN NaN 101.0 62.0 21 NaN NaN 101.0 62.0 丁 24 NaN NaN 26.0 121.0 24 NaN NaN 26.0 121.0 A 76 NaN NaN 106.0 134.0 76 NaN NaN 106.0 134.0 B 33 NaN NaN 23.0 104.0 33 NaN NaN 23.0 104.0
df1. append( df2, sort= False )
Python Flask FastAPI Tornado Pulsar 甲 86 91.0 125.0 NaN NaN 乙 114 73.0 41.0 NaN NaN 丙 20 90.0 37.0 NaN NaN 丁 96 84.0 134.0 NaN NaN 戊 47 78.0 22.0 NaN NaN 己 80 43.0 90.0 NaN NaN 甲 13 NaN NaN 29.0 3.0 乙 103 NaN NaN 12.0 81.0 丙 21 NaN NaN 101.0 62.0 丁 24 NaN NaN 26.0 121.0 A 76 NaN NaN 106.0 134.0 B 33 NaN NaN 23.0 104.0
df5 = df1. append( df2, ignore_index= True , sort= False )
df5
Python Flask FastAPI Tornado Pulsar 0 86 91.0 125.0 NaN NaN 1 114 73.0 41.0 NaN NaN 2 20 90.0 37.0 NaN NaN 3 96 84.0 134.0 NaN NaN 4 47 78.0 22.0 NaN NaN 5 80 43.0 90.0 NaN NaN 6 13 NaN NaN 29.0 3.0 7 103 NaN NaN 12.0 81.0 8 21 NaN NaN 101.0 62.0 9 24 NaN NaN 26.0 121.0 10 76 NaN NaN 106.0 134.0 11 33 NaN NaN 23.0 104.0
df5. index
RangeIndex(start=0, stop=12, step=1)
df5. loc[ 3 ]
Python 96.0
Flask 84.0
FastAPI 134.0
Tornado NaN
Pulsar NaN
Name: 3, dtype: float64
df5. loc[ 4 ]
Python 47.0
Flask 78.0
FastAPI 22.0
Tornado NaN
Pulsar NaN
Name: 4, dtype: float64
df5. loc[ 5 ]
Python 80.0
Flask 43.0
FastAPI 90.0
Tornado NaN
Pulsar NaN
Name: 5, dtype: float64
数据合并
将两个DataFrame表的数据进行合并,同mysql的join连接。
cate = DataFrame( {
'id' : [ i for i in range ( 1 , 6 ) ] ,
'name' : [ '美食' , '音乐' , '视频' , '笑话' , '军事' ]
} )
cate
id name 0 1 美食 1 2 音乐 2 3 视频 3 4 笑话 4 5 军事
import time
titles = [ ]
cate_ids = [ ]
for i in range ( 1 , 21 ) :
item = cate. loc[ np. random. choice( cate. index) ]
titles. append( f' { item[ "name" ] } - { time. time( ) } ' )
cate_ids. append( item[ 'id' ] )
content = DataFrame( {
'id' : [ i for i in range ( 1 , 21 ) ] ,
'title' : titles,
'cate_id' : cate_ids
} )
content
id title cate_id 0 1 军事-1649392870.4940078 5 1 2 美食-1649392870.4940078 1 2 3 视频-1649392870.4950054 3 3 4 视频-1649392870.4950054 3 4 5 音乐-1649392870.4950054 2 5 6 美食-1649392870.4950054 1 6 7 军事-1649392870.4950054 5 7 8 笑话-1649392870.496003 4 8 9 视频-1649392870.496003 3 9 10 音乐-1649392870.496003 2 10 11 军事-1649392870.496003 5 11 12 笑话-1649392870.4970002 4 12 13 笑话-1649392870.4970002 4 13 14 美食-1649392870.4970002 1 14 15 视频-1649392870.4970002 3 15 16 笑话-1649392870.4970002 4 16 17 美食-1649392870.4979968 1 17 18 军事-1649392870.4979968 5 18 19 音乐-1649392870.4979968 2 19 20 视频-1649392870.4979968 3
display( cate, content)
id name 0 1 美食 1 2 音乐 2 3 视频 3 4 笑话 4 5 军事
id title cate_id 0 1 军事-1649392870.4940078 5 1 2 美食-1649392870.4940078 1 2 3 视频-1649392870.4950054 3 3 4 视频-1649392870.4950054 3 4 5 音乐-1649392870.4950054 2 5 6 美食-1649392870.4950054 1 6 7 军事-1649392870.4950054 5 7 8 笑话-1649392870.496003 4 8 9 视频-1649392870.496003 3 9 10 音乐-1649392870.496003 2 10 11 军事-1649392870.496003 5 11 12 笑话-1649392870.4970002 4 12 13 笑话-1649392870.4970002 4 13 14 美食-1649392870.4970002 1 14 15 视频-1649392870.4970002 3 15 16 笑话-1649392870.4970002 4 16 17 美食-1649392870.4979968 1 17 18 军事-1649392870.4979968 5 18 19 音乐-1649392870.4979968 2 19 20 视频-1649392870.4979968 3
display( cate, content. head( ) )
id name 0 1 美食 1 2 音乐 2 3 视频 3 4 笑话 4 5 军事
id title cate_id 0 1 军事-1649392870.4940078 5 1 2 美食-1649392870.4940078 1 2 3 视频-1649392870.4950054 3 3 4 视频-1649392870.4950054 3 4 5 音乐-1649392870.4950054 2
pd. merge( cate, content)
id name title cate_id 0 1 美食 军事-1649392870.4940078 5 1 2 音乐 美食-1649392870.4940078 1 2 3 视频 视频-1649392870.4950054 3 3 4 笑话 视频-1649392870.4950054 3 4 5 军事 音乐-1649392870.4950054 2
pd. merge( cate, content, left_on= 'id' , right_on= 'cate_id' )
id_x name id_y title cate_id 0 1 美食 2 美食-1649392870.4940078 1 1 1 美食 6 美食-1649392870.4950054 1 2 1 美食 14 美食-1649392870.4970002 1 3 1 美食 17 美食-1649392870.4979968 1 4 2 音乐 5 音乐-1649392870.4950054 2 5 2 音乐 10 音乐-1649392870.496003 2 6 2 音乐 19 音乐-1649392870.4979968 2 7 3 视频 3 视频-1649392870.4950054 3 8 3 视频 4 视频-1649392870.4950054 3 9 3 视频 9 视频-1649392870.496003 3 10 3 视频 15 视频-1649392870.4970002 3 11 3 视频 20 视频-1649392870.4979968 3 12 4 笑话 8 笑话-1649392870.496003 4 13 4 笑话 12 笑话-1649392870.4970002 4 14 4 笑话 13 笑话-1649392870.4970002 4 15 4 笑话 16 笑话-1649392870.4970002 4 16 5 军事 1 军事-1649392870.4940078 5 17 5 军事 7 军事-1649392870.4950054 5 18 5 军事 11 军事-1649392870.496003 5 19 5 军事 18 军事-1649392870.4979968 5
pd. merge( cate, content, left_on= 'id' , right_on= 'cate_id' , suffixes= [ '_cate' , '_content' ] )
id_cate name id_content title cate_id 0 1 美食 2 美食-1649392870.4940078 1 1 1 美食 6 美食-1649392870.4950054 1 2 1 美食 14 美食-1649392870.4970002 1 3 1 美食 17 美食-1649392870.4979968 1 4 2 音乐 5 音乐-1649392870.4950054 2 5 2 音乐 10 音乐-1649392870.496003 2 6 2 音乐 19 音乐-1649392870.4979968 2 7 3 视频 3 视频-1649392870.4950054 3 8 3 视频 4 视频-1649392870.4950054 3 9 3 视频 9 视频-1649392870.496003 3 10 3 视频 15 视频-1649392870.4970002 3 11 3 视频 20 视频-1649392870.4979968 3 12 4 笑话 8 笑话-1649392870.496003 4 13 4 笑话 12 笑话-1649392870.4970002 4 14 4 笑话 13 笑话-1649392870.4970002 4 15 4 笑话 16 笑话-1649392870.4970002 4 16 5 军事 1 军事-1649392870.4940078 5 17 5 军事 7 军事-1649392870.4950054 5 18 5 军事 11 军事-1649392870.496003 5 19 5 军事 18 军事-1649392870.4979968 5
content
id title cate_id 0 1 军事-1649392870.4940078 5 1 2 美食-1649392870.4940078 1 2 3 视频-1649392870.4950054 3 3 4 视频-1649392870.4950054 3 4 5 音乐-1649392870.4950054 2 5 6 美食-1649392870.4950054 1 6 7 军事-1649392870.4950054 5 7 8 笑话-1649392870.496003 4 8 9 视频-1649392870.496003 3 9 10 音乐-1649392870.496003 2 10 11 军事-1649392870.496003 5 11 12 笑话-1649392870.4970002 4 12 13 笑话-1649392870.4970002 4 13 14 美食-1649392870.4970002 1 14 15 视频-1649392870.4970002 3 15 16 笑话-1649392870.4970002 4 16 17 美食-1649392870.4979968 1 17 18 军事-1649392870.4979968 5 18 19 音乐-1649392870.4979968 2 19 20 视频-1649392870.4979968 3
content. loc[ 3 ]
id 4
title 视频-1649392870.4950054
cate_id 3
Name: 3, dtype: object
content. loc[ 3 , 'cate_id' ] = 6
content. head( )
id title cate_id 0 1 军事-1649392870.4940078 5 1 2 美食-1649392870.4940078 1 2 3 视频-1649392870.4950054 3 3 4 视频-1649392870.4950054 6 4 5 音乐-1649392870.4950054 2
pd. merge( cate, content, left_on= 'id' , right_on= 'cate_id' , suffixes= [ '_cate' , '_content' ] )
id_cate name id_content title cate_id 0 1 美食 2 美食-1649392870.4940078 1 1 1 美食 6 美食-1649392870.4950054 1 2 1 美食 14 美食-1649392870.4970002 1 3 1 美食 17 美食-1649392870.4979968 1 4 2 音乐 5 音乐-1649392870.4950054 2 5 2 音乐 10 音乐-1649392870.496003 2 6 2 音乐 19 音乐-1649392870.4979968 2 7 3 视频 3 视频-1649392870.4950054 3 8 3 视频 9 视频-1649392870.496003 3 9 3 视频 15 视频-1649392870.4970002 3 10 3 视频 20 视频-1649392870.4979968 3 11 4 笑话 8 笑话-1649392870.496003 4 12 4 笑话 12 笑话-1649392870.4970002 4 13 4 笑话 13 笑话-1649392870.4970002 4 14 4 笑话 16 笑话-1649392870.4970002 4 15 5 军事 1 军事-1649392870.4940078 5 16 5 军事 7 军事-1649392870.4950054 5 17 5 军事 11 军事-1649392870.496003 5 18 5 军事 18 军事-1649392870.4979968 5
pd. merge( cate, content, left_on= 'id' , right_on= 'cate_id' , suffixes= [ '_cate' , '_content' ] , how= 'outer' )
id_cate name id_content title cate_id 0 1.0 美食 2 美食-1649392870.4940078 1 1 1.0 美食 6 美食-1649392870.4950054 1 2 1.0 美食 14 美食-1649392870.4970002 1 3 1.0 美食 17 美食-1649392870.4979968 1 4 2.0 音乐 5 音乐-1649392870.4950054 2 5 2.0 音乐 10 音乐-1649392870.496003 2 6 2.0 音乐 19 音乐-1649392870.4979968 2 7 3.0 视频 3 视频-1649392870.4950054 3 8 3.0 视频 9 视频-1649392870.496003 3 9 3.0 视频 15 视频-1649392870.4970002 3 10 3.0 视频 20 视频-1649392870.4979968 3 11 4.0 笑话 8 笑话-1649392870.496003 4 12 4.0 笑话 12 笑话-1649392870.4970002 4 13 4.0 笑话 13 笑话-1649392870.4970002 4 14 4.0 笑话 16 笑话-1649392870.4970002 4 15 5.0 军事 1 军事-1649392870.4940078 5 16 5.0 军事 7 军事-1649392870.4950054 5 17 5.0 军事 11 军事-1649392870.496003 5 18 5.0 军事 18 军事-1649392870.4979968 5 19 NaN NaN 4 视频-1649392870.4950054 6