Pandas的拼接操作

2021-08-25 22:16:18 字數 4111 閱讀 2875

import numpy as np

from pandas import dataframe, series

import pandas as pd

''''''

'''0回顧numpy的級聯

練習:1.生成2個3*3的矩陣,對其分別進行兩個維度上的級聯

'''nd = np.random.randint(0, 10, size=(3, 3))

print(nd)

con_np = np.concatenate((nd, nd), axis=0) # 0是第一維的方向

print(con_np)

con_np_col = np.concatenate((nd, nd), axis=1) # 1代表列,傳遞引數時,用()或者效果一樣

print(con_np_col)

'''定義乙個生成dataframe的函式

'''def make_df(cols, ind):

data =

return dataframe(data, index=ind, columns=cols)

result = make_df(["a", "b"], [1, 2])

print(result)

'''1.使用pd.concat()級聯

pandas使用pd.concat函式,與np.concatenate函式類似,只是多了一些引數:

pd.concat(objs, axis=0, join='outer', join_axes=none, ignore_index=false,

keys=none, levels=none, names=none, verify_integrity=false,

copy=true)

'''# 1)簡單級聯 和np.concatenate一樣,優先增加行數(預設axis=0)

df1 = make_df(list("ab"), [0, 1])

df2 = make_df(list("ab"), [2, 3])

print(pd.concat([df1, df2]))

# 可以通過設定axis來改變級聯的方向

print(pd.concat((df1, df2), axis=1))

# 注意:index在級聯時可以重複 列名不建議相同,列名表示屬性

df3 = make_df(list("ab"), [0, 1, 2])

df4 = make_df(list("ab"), [1, 2, 3])

df5 = pd.concat((df3, df4))

print(df5)

print(df5.loc[[1, 2]])

# 也可以選擇忽略ignore_index,重新索引

print(pd.concat([df3, df4], ignore_index=true))

# 或者使用多層索引keys concat([x,y],keys=["x","y"])

x = make_df(list("xy"), ["a", "b"])

y = make_df(list("xy"), ["a", "b"])

# keys可以使我們合併之後的資料更加的清晰

print(pd.concat([x, y], keys=["x", "y"]))

'''2)不匹配級聯 不匹配指的是級聯的索引不一致。例如縱向級聯時列索引不一致,橫向級聯時行索引不一致

有三種連線方式:

外連線:補nan(預設模式)

內連線:只連線匹配的項

連線指定軸join_axes'''

# 外連線:補nan(預設模式)

df6 = make_df(list("cd"), [1, 3])

df7 = make_df(list("de"), [2, 4])

print(pd.concat((df6, df7)))

# 內連線:只連線匹配的項

print(pd.concat((df6, df7), join="inner"))

# 連線指定軸join_axes

df8 = make_df(list("acd"), [0, 1, 2])

df9 = make_df(list("cdf"), [3, 4, 5])

# join_axes以某乙個dataframe列索引為新的列索引值

print(pd.concat([df8, df9], join_axes=[df8.columns]))

df10 = make_df(["大眾", "福克斯"], [0, 1, 2, 3, 4])

df11 = make_df(["大眾", "福克斯"], [5, 6, 7, 8, 9])

'''2.使用pd.merge()合併

merge與concat的區別在於:merge需要依據某一共同的行或列來進行合併

使用pd.merge()合併時,會自動根據兩者相同column名稱的那一列,作為key來進行合併。

注意:每一列元素的順序不要求一致

'''# 1)一對一合併

df12 = dataframe()

df13 = dataframe()

print(pd.merge(df12, df13))

# print(pd.concat([df12, df13], axis=1)) 無法達到融合的效果

# 2)多對一合併

df14 = dataframe()

df15 = dataframe()

print(pd.merge(df14, df15))

# 3)多對多合併

df16 = dataframe()

df17 = dataframe()

# 在進行多對多合併時,每乙個資料都沒有放過

print(pd.merge(df16, df17))

# 4)key的規範化 使用on=顯式指定哪一列為key,當有多個key相同時使用

df18 = dataframe()

df19 = dataframe()

print(pd.merge(df18, df19))

# 只要employee相同,則進行合併

print(pd.merge(df18, df19, on="employee"))

print(pd.merge(df18, df19, on="group", suffixes=["_a", "_b"]))

# 使用left_on和right_on指定左右兩邊的列作為key,當左右兩邊的key都不相等時使用

df20 = dataframe()

df21 = dataframe()

# 引數一為左,引數二為右

print(pd.merge(df20, df21, left_on="employer", right_on="employee"))

print(pd.merge(df20, df21, left_on="team", right_on="group"))

# 5)內合併與外合併

# 內合併:只保留兩者都有的key(預設模式)

df22 = dataframe()

df23 = dataframe()

print(pd.merge(df22, df23))

# 外合併how='outer':補nan

print(pd.merge(df22, df23, how="outer"))

# 左合併、右合併:how='left',how='right'

print(pd.merge(df22, df23, how="left"))

print(pd.merge(df22, df23, how="right"))

'''6)列衝突的解決 當列衝突時,即有多個列名稱相同時,需要使用on=來指定哪乙個列作為key,

配合suffixes指定衝突列名,可以使用suffixes=自己指定字尾

'''df24 = dataframe()

df25 = dataframe()

df24.columns = ["employee", "group", "salary"]

print(pd.merge(df24, df25, on="employee", suffixes=["_a", "_b"])) # suffixes指定字尾

pandas的拼接操作

pandas的拼接分為兩種 合併 pd.merge def make df index,cols df pd.dataframe df.index index return df df1 make df 1 2,3 4,5 6 list abcdef df2 df1.copy display df1...

pandas基本操作及拼接

二 pandas拼接操作 原教程鏈結,需要自取。pandas是在numpy的基礎上開發的資料處理工具包,提供了快速 靈活的資料結構。它適用於處理一下型別的資料 pandas的主要資料結構 1.用值列表生成series series pd.series 1 3,5 np.nan,6,8 series ...

pandas資料拼接

pandas資料拼接有可能會用到,比如出現重複資料,需要合併兩份資料的交集,並集就是個不錯的選擇,知識追尋者本著技多不壓身的態度蠻學習了一下下 知識追尋者 inheriting the spirit of open source,spreading technology knowledge 在進行學...