介紹在本文中,我們將討論借助pandas方法組合數(shù)據(jù)框的方法。有時,當我們在進行一個大型項目并且數(shù)據(jù)來自不同的來源時,我們需要將這些數(shù)據(jù)合并為一個數(shù)據(jù)幀。 pandas中很少有數(shù)據(jù)科學人員用來使數(shù)據(jù)框架更有價值的方法。 這些方法按行和列相加進行劃分。 方法merge()和join()使用SQL連接方法方法基于公共鍵和索引工作。 該方法的concat()正在數(shù)據(jù)幀將它們結合起來,使一個導致數(shù)據(jù)幀。 你可以轉到有關每個需求的系列和數(shù)據(jù)框架的基本文章。 串聯(lián)方法將兩個數(shù)據(jù)幀組合成一個水平方向。 python示例: import pandas as pd
為了組合數(shù)據(jù)幀,我們至少需要兩個數(shù)據(jù)幀。 #數(shù)據(jù)幀1
df1 = pd.DataFrame({"C1":["1", "2"],
"C2":["3", "4"],},
index=[0, 1])
#數(shù)據(jù)幀2
df2 = pd.DataFrame({"C1":["5", "6"],
"C2":["7", "8"],},
index=[2, 3])
#結合這兩個數(shù)據(jù)幀
data = [df1,df2]
combined_df = pd.concat(data)combined_df
我們知道,當我們水平組合兩個數(shù)據(jù)幀時,列是相同的,并且索引正在增加。 級聯(lián)的論點- Keys參數(shù):它采用序列或不采用序列,并且將密鑰作為層次結構索引傳遞到最外層,如下所示:
key_data = pd.concat(data, keys=["x", "y"])
key_data
現(xiàn)在,我們也可以使用鍵訪問數(shù)據(jù),如示例所示。 key_data.loc["y"]
2. Axis:此參數(shù)用于垂直組合數(shù)據(jù)框架,這意味著要添加更多列,如以下示例所示: df3 = pd.DataFrame({"C3":["10", "11"],
"C4":["12", "13"],},
index=[1,2])
在這里,我們給出索引(1,2),但在“ df1”數(shù)據(jù)幀中,索引為(0,1)。因此,結果將得到一個新行,缺失值填充為“ nan ”。 axis_data = pd.concat([df1, df3], axis=1)
axis_data
3.聯(lián)接:此參數(shù)有兩種聯(lián)接類型,即外部聯(lián)接和內部聯(lián)接。默認聯(lián)接是外部聯(lián)接,而內部聯(lián)接將給出數(shù)據(jù)幀的公共交集,如下所示: join_data = pd.concat([df1, df3], axis=1, join="inner")
join_data
結合數(shù)據(jù)框和系列這是組合序列和數(shù)據(jù)框的非常有用的方法,如下所示: series_data = pd.Series(["21", "22"], name="C5")
combine_series = pd.concat([df1, series_data], axis=1)
combine_series
合并方式與結構化查詢語言(SQL)中的關系數(shù)據(jù)庫相同,此方法用于連接不同的數(shù)據(jù)幀。 單鍵數(shù)據(jù)幀示例。 “ on ”參數(shù)用于從兩個數(shù)據(jù)幀中獲取公共列。 left = pd.DataFrame({"keys":["K0", "K1"],
"C1":["1", "2"],
"C2":["3", "4"],})
right = pd.DataFrame({"keys":["K0", "K1"],
"C3":["10", "11"],
"C4":["12", "13"]})
basic_join = pd.merge(left, right, on="keys")
basic_join
具有兩個關鍵數(shù)據(jù)幀的示例。 left = pd.DataFrame({"k1": ["A0", "A0", "A1", "A2"],
"k2": ["A0", "A1", "A0", "A1"],
"A": ["1", "2", "3", "4"],
"B": ["5", "6", "7", "8"]})
right = pd.DataFrame({"k1": ["A0", "A1", "A1", "A2"],
"k2": ["A0", "A0", "A0", "A0"],
"C": ["9", "10", "11", "12"],
"D": ["13", "14", "15", "16"]})
two_key_result = pd.merge(left, right, on=["k1", "k2"])
two_key_result
SQL do連接,例如左連接,右連接,內部連接和外部連接。這些示例如下所示: left_result = pd.merge(left, right, how="left", on=["k1", "k2"])
right_result = pd.merge(left, right, how="right", on=["k1", "k2"])
inner_result = pd.merge(left, right, how="inner", on=["k1", "k2"])
outer_result = pd.merge(left, right, how="outer", on=["k1", "k2"])
merge方法包含一個參數(shù),該參數(shù)在結果數(shù)據(jù)幀中添加帶有信息的分類列,如以下示例所示。 data1 = pd.DataFrame({"C1": [4, 6], "col_left": ["a", "b"]})
data2 = pd.DataFrame({"C1": [6, 3, 3], "col_right": [3, 3, 3]})
#The indicator argument is "True"
pd.merge(data1, data2, on="C1", how="outer", indicator=True)
該方法對于基于左和右數(shù)據(jù)幀組合兩個數(shù)據(jù)幀也很有用。 在此示例中,左側數(shù)據(jù)比右側數(shù)據(jù)占主導地位,如下所示: left = pd.DataFrame({"X1":["1", "2"],
"X2":["3", "4"]},
index = ["K0", "K1"])
right = pd.DataFrame({"X3":["10", "11"],
"X4":["12", "13"]},
index = ["K0", "K2"])
result = left.join(right)
result
在下面的示例中,權限是主要的。 result1 = right.join(left)
result1
我們還可以基于鍵和索引連接兩個數(shù)據(jù)幀,如下所示: left = pd.DataFrame({"k1": ["A0", "A1", "A0", "A1"],
"C1": ["1", "2", "3", "4"],
"C2": ["5", "6", "7", "8"]})
right = pd.DataFrame({"C3": ["10", "11"], "C4": ["12", "13"]}, index=["A0", "K1"])
result = left.join(right, on="k1")
result
結論:本文給出了基于索引,鍵組合數(shù)據(jù)幀的基本思想。數(shù)據(jù)框的組合還適用于將在以后的文章中介紹的多個鍵和索引。
|