數據集拆分是將一個大型的數據集拆分為多個較小的數據集,可以讓數據更加清晰易懂,也方便對單個數據集進行分析和處理。 同時,分開的數據集也可以分別應用不同的數據分析方法進行處理,更加高效和專業。 數據集合併則是將多個數據集合併成一個大的數據集,可以提供更全面的信息,也可以進行更綜合的數據分析。 同時,數 ...
數據集拆分是將一個大型的數據集拆分為多個較小的數據集,可以讓數據更加清晰易懂,也方便對單個數據集進行分析和處理。
同時,分開的數據集也可以分別應用不同的數據分析方法進行處理,更加高效和專業。
數據集合併則是將多個數據集合併成一個大的數據集,可以提供更全面的信息,也可以進行更綜合的數據分析。
同時,數據集合併也可以減少數據處理的複雜度和時效性,提升數據分析的準確性和結果的可靠性。
1. 數據集拆分
拆分數據集比較簡單,之前介紹過數據檢索的各種方式,其實檢索出的結果就是拆分出來的數據。
1.1 拆分行
拆分單行和多行。
import pandas as pd
df = pd.DataFrame(
{
"name": ["小紅", "小明", "小華"],
"age": [13, 15, 14],
"gender": ["男", "女", "男"],
}
)
first_row = df.loc[0:0, :]
left_rows = df.loc[1:, :]
1.2 拆分列
拆分單列或者多列。
import pandas as pd
df = pd.DataFrame(
{
"name": ["小紅", "小明", "小華"],
"age": [13, 15, 14],
"gender": ["男", "女", "男"],
}
)
first_col = df[["name"]]
left_cols = df[["age", "gender"]]
1.3 按條件拆分
下麵的示例按照列的值來拆分數據集。
import pandas as pd
df = pd.DataFrame(
{
"name": ["小紅", "小明", "小華"],
"age": [13, 15, 14],
"gender": ["男", "女", "男"],
}
)
males = df[df["gender"] == "男"]
greater13 = df[df["age"] > 13]
如果有多個條件,可以通過邏輯與(&)和邏輯或(|)符號來連接,具體可以參照之前介紹數據檢索的文章。
2. 數據集合併
數據集的合併也是比較常用的,因為我們收集來的數據可能來自不同的地方。
2.1 merge 方法
merge
方法合併DataFrame
時,有兩個重要的參數:
- how:設置合併的方式,有
inner
,outer
,left
,right
四種方式。 - on:依據那個列來合併
下麵是四種不同合併方式的示例。
inner
合併:name
值相同的數據才保留下來。
import pandas as pd
df1 = pd.DataFrame(
{
"name": ["小紅", "小明"],
"age": [13, 15],
"gender": ["男", "女"],
}
)
df2 = pd.DataFrame(
{
"name": ["小紅", "小華"],
"score": [99, 100],
}
)
df = pd.merge(df1, df2, how="inner", on="name")
df
outer
合併:兩個DataFrame
的name
都保留下來,合併後缺失值的填充NaN
。
df = pd.merge(df1, df2, how="outer", on="name")
df
left
合併:df1
的name
全部保留下來,缺失的值填充NaN
。
df = pd.merge(df1, df2, how="left", on="name")
df
right
合併:df2
的name
全部保留下來,缺失的值填充NaN
。
df = pd.merge(df1, df2, how="right", on="name")
df
2.2 concat 方法
兩個DataFrame
結構相同時,一般是按行來合併(axis=0
)。
df1 = pd.DataFrame(
{
"name": ["小紅", "小明"],
"age": [13, 15],
"gender": ["男", "女"],
}
)
df2 = pd.DataFrame(
{
"name": ["小紅", "小華"],
"age": [13, 15],
"gender": ["男", "女"],
}
)
df = pd.concat([df1, df3], axis=0)
df
如果兩個DataFrame
結構不一樣時,用列合併(axis=1
)。
df1 = pd.DataFrame(
{
"name": ["小紅", "小明"],
"age": [13, 15],
"gender": ["男", "女"],
}
)
df2 = pd.DataFrame(
{
"score": [100, 90],
"city": ["nanjing", "beijing"],
}
)
df = pd.concat([df1, df3], axis=1)
df
2.3 join 方法
join
方法和merge
方法類似,主要區別在於join
是DataFrame
的方法,而merge
是pandas
的方法。
下麵請直接看與merge
方法相似的四種示例。
inner
合併:name
值相同的數據才保留下來。
df1 = pd.DataFrame(
{
"name": ["小紅", "小明"],
"age": [13, 15],
"gender": ["男", "女"],
}
)
df2 = pd.DataFrame(
{
"name": ["小紅", "小華"],
"score": [99, 100],
}
)
df1 = df1.set_index("name")
df2 = df2.set_index("name")
df = df1.join(df2, how="inner")
df.reset_index()
註意,這裡顯示了join
和merge
的一個區別,join
預設是依據索引(index
)來合併DataFrame
的,
所以,先把name
設置為索引之後才合併的,合併之後又通過reset_index
重置了索引,得到了和merge
同樣的結果。
outer
合併:兩個DataFrame
的name
都保留下來,合併後缺失值的填充NaN
。
df1 = df1.set_index("name")
df2 = df2.set_index("name")
df = df1.join(df2, how="outer")
df.reset_index()
註意,最後的數據雖然和merge
一樣,但是順序有些區別。
left
合併:df1
的name
全部保留下來,缺失的值填充NaN
。
df1 = df1.set_index("name")
df2 = df2.set_index("name")
df = df1.join(df2, how="left")
df.reset_index()
left
的結果和merge
一樣。
right
合併:df2
的name
全部保留下來,缺失的值填充NaN
。
df1 = df1.set_index("name")
df2 = df2.set_index("name")
df = df1.join(df2, how="right")
df.reset_index()
right
的結果和merge
一樣。
3. 總結回顧
總的來說,pandas
數據集拆分和合併的意義在於高效利用數據,提高數據分析的質量和效率,進一步實現數據驅動的業務增長。
本篇主要介紹了數據集拆分和合併最常用的幾種基本方法,根據具體的業務組合這些基本方法,就能夠進行更複雜的數據集拆分和合併。