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 在進行學...