Pandas資料連線

2022-06-07 16:24:09 字數 4956 閱讀 1129

s1=pd.series([0,1],index=['

a','b'

])s2=pd.series([2,3,4],index=['

c','

d','e'

])s3=pd.series([5,6],index=['

f','g'

])in[4]: pd.concat([s1,s2,s3])#

series行合併

out[4]:

a 0

b 1c 2d 3e 4f 5g 6dtype: int64

說明:直接contact之後,index只是重複,而不是變成我們希望的那樣,這樣在後續的操作中,容易出現邏輯錯誤。

使用result = result.reset_index(drop=true)來改變index就可以了

s4=pd.series([0,5,5,6],index=['

a','

b','

f','g'

])in[6]: pd.concat([s1,s4],axis=1,join='

inner

')#並集

out[6]:

0 1a 0 0

b 1 5in[7]: pd.concat([s1,s4],axis=1,join_axes=[['

a','

c','

b','

e']])#

指定索引

out[7]:

0 1a 0.0 0.0c nan nan

b 1.0 5.0e nan nan

in[12]: pd.concat(,axis=1)#

字典鍵做列外索引

out[12]:

level1 level2

one two three four

a 0 1 5.0 6.0b 2 3nan nan

c 4 5 7.0 8.0

import

pandas as pd

left = pd.dataframe()

right = pd.dataframe()

left

姓名 年齡

0 q 18

1 w 19

2 e 20right

姓名 籍貫

0 q 湖北

1w 北京

2r 上海

#使用pd.merge()方式進行融合,在預設情況下將重疊列當做鍵,也可通過引數on指定鍵

pd.merge(left,right,on='姓名'

) 姓名 年齡 籍貫

0 q 18湖北

1 w 19北京

#how預設為交集inner,可以指定為並集outer

pd.merge(left,right,on='

姓名',how='

outer')

姓名 年齡 籍貫

0 q 18湖北

1 w 19北京

2 e 20nan

3r nan 上海

pd.merge(left,right,on='

姓名',how='

left')

姓名 年齡 籍貫

0 q 18湖北

1 w 19北京

2 e 20nan

pd.merge(left,right,on='

姓名',how='

right')

姓名 年齡 籍貫

0 q 18湖北

1 w 19北京

2r nan 上海

#設定indicator引數為true ,則融合結果中將增加列名為"_merge"的一列,其取值代表了不同的含義:

pd.merge(left,right,on='

姓名',how='

outer

',indicator=true)

姓名 年齡 籍貫 _merge

0 q 18湖北 both

1 w 19北京 both

2 e 20nan left_only

3 r nan 上海 right_only

pd.merge(left,right,on='

姓名',how='

outer

',indicator=true)

姓名 年齡 籍貫 _merge

0 q 18湖北 both

1 w 19北京 both

2 e 20nan left_only

3r nan 上海 right_only

#indicator引數可以接收乙個字串,生成的指標列的列名將由" _merge"變為該字串:

pd.merge(left,right,on='

姓名',how='

outer

',indicator='融合'

) 姓名 年齡 籍貫 融合

0 q 18湖北 both

1 w 19北京 both

2 e 20nan left_only

3r nan 上海 right_only

#不按共同列的融合,融合後共同列名自動增加字尾_x,_y

left = pd.dataframe()

right = pd.dataframe()

pd.merge(left,right,left_on='

姓名1',right_on='

姓名2',how='

outer')

姓名1 資訊_x 姓名2 資訊_y

0 q 18q 湖北

1 w 19w 北京

2 e 20nan nan

3nan nan r 上海

#使用suffixes利用原列名以及字尾組合形成新的列名:

pd.merge(left,right,left_on='

姓名1',right_on='

姓名2',how='

outer

',suffixes=('

_left

','_right'))

姓名1 資訊_left 姓名2 資訊_right

0 q 18q 湖北

1 w 19w 北京

2 e 20nan nan

3nan nan r 上海

#建立left的索引為鍵, right的鍵為姓名的兩個dataframe :

left = pd.dataframe(,index=['

q','

w','e'

])left.index.name='姓名'

right = pd.dataframe()

left

年齡姓名

q 18w 19e 20right

姓名 籍貫

0 q 湖北

1w 北京

2r 上海

pd.merge(left,right,left_index=true,right_on='

姓名',how='

outer

') #

或者使用join:left.join(right,on='姓名',how='outer')

年齡 姓名 籍貫

0 18q 湖北

1 19w 北京

2 20e nan

2nan r 上海

#建立left和right的索引都為鍵的兩個dataframe :

left = pd.dataframe(,index=['

q','

w','e'

])left.index.name='姓名'

right = pd.dataframe(,index=['

q','

w','r'

])right.index.name='姓名'

#使用pd.merge()

pd.merge(left,right,left_index=true,right_index=true,how='

outer')

年齡 籍貫

姓名

e 20nan

q 18湖北

r nan 上海

w 19北京

#使用join

left.join(right,how='

outer')

年齡 籍貫

姓名

e 20nan

q 18湖北

r nan 上海

w 19北京

#dataframe.combine_ first例項方法實現了用引數物件中的資料為呼叫者物件的缺失資料"打補丁」,並

pandas資料連線合併

1 df1和df2相同列合併 圖中可以看出合併後出現了重複行,可以使用df.drop duplicates 刪除重複行 另外我們可以看到合併之後的資料行索引還是以前df的索引值,要想使新生成的df索引從0開始,可以新增 ignore index true 執行結果如下 2 df1和df2不同列合併 ...

pandas初學,連線資料庫

總結 示例 pandas 是基於numpy 的一種工具,該工具是為了解決資料分析任務而建立的。如下 示例 import numpy as np import pandas as pd 如下 示例 from sqlalchemy import create engine import pandas a...

pandas 排序 Pandas 資料排序

python 的 pandas 庫中有一類對資料排序的方法,主要分為對引數列排序,對數值排序,及二者混合三種。一.引數列排序 首先我們生成乙個亂序數列 unsorted df 隨後我們可通過 df.sort index 函式對資料集進行排序操作 如不做規定,返回行引數正序排序 新增引數 ascend...