日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Pandas.concat連接DataFrame,Series的示例代碼_python

作者:餃子大人 ? 更新時間: 2023-05-30 編程語言

如何使用pandas.concat()函數連接pandas.DataFrame和pandas.Series。

將對以下內容進行說明。

  • pandas.concat的基本用法()
    • 指定要連接的對象:objs
    • 連接方向的指定(垂直/水平):axis
    • 指定連接方法(外部連接/內部連接):join
  • pandas.DataFrame的連接
  • pandas.Series的連接
  • pandas.DataFrame和pandas.Series的連接

使用以下的pandas.DataFrame和pandas.Series為例。

import pandas as pd

df1 = pd.DataFrame({'A': ['A1', 'A2', 'A3'],
? ? ? ? ? ? ? ? ? ? 'B': ['B1', 'B2', 'B3'],
? ? ? ? ? ? ? ? ? ? 'C': ['C1', 'C2', 'C3']},
? ? ? ? ? ? ? ? ? ?index=['ONE', 'TWO', 'THREE'])
print(df1)
# ? ? ? ? A ? B ? C
# ONE ? ?A1 ?B1 ?C1
# TWO ? ?A2 ?B2 ?C2
# THREE ?A3 ?B3 ?C3

df2 = pd.DataFrame({'C': ['C2', 'C3', 'C4'],
? ? ? ? ? ? ? ? ? ? 'D': ['D2', 'D3', 'D4']},
? ? ? ? ? ? ? ? ? ?index=['TWO', 'THREE', 'FOUR'])
print(df2)
# ? ? ? ? C ? D
# TWO ? ?C2 ?D2
# THREE ?C3 ?D3
# FOUR ? C4 ?D4

s1 = pd.Series(['X1', 'X2', 'X3'], index=['ONE', 'TWO', 'THREE'], name='X')
print(s1)
# ONE ? ? ?X1
# TWO ? ? ?X2
# THREE ? ?X3
# Name: X, dtype: object

s2 = pd.Series(['Y2', 'Y3', 'Y4'], index=['TWO', 'THREE', 'FOUR'], name='Y')
print(s2)
# TWO ? ? ?Y2
# THREE ? ?Y3
# FOUR ? ? Y4
# Name: Y, dtype: object

pandas.concat的基本用法()

指定要連接的對象:objs
通過參數objs指定要連接的pandas.DataFrame和pandas.Series,指定類型為列表或元組。

df_concat = pd.concat([df1, df2])
print(df_concat)
#          A    B   C    D
# ONE     A1   B1  C1  NaN
# TWO     A2   B2  C2  NaN
# THREE   A3   B3  C3  NaN
# TWO    NaN  NaN  C2   D2
# THREE  NaN  NaN  C3   D3
# FOUR   NaN  NaN  C4   D4

要連接的對象的數量不限于兩個,可以是三個或更多。

df_concat_multi = pd.concat([df1, df2, df1])
print(df_concat_multi)
#          A    B   C    D
# ONE     A1   B1  C1  NaN
# TWO     A2   B2  C2  NaN
# THREE   A3   B3  C3  NaN
# TWO    NaN  NaN  C2   D2
# THREE  NaN  NaN  C3   D3
# FOUR   NaN  NaN  C4   D4
# ONE     A1   B1  C1  NaN
# TWO     A2   B2  C2  NaN
# THREE   A3   B3  C3  NaN

結果是創建了一個新的對象,原始對象保持不變。

連接方向的指定(垂直/水平):axis

垂直或水平方向由axis參數指定。 如果axis = 0,則它們是垂直鏈接的。默認設置為axis = 0,因此可以省略不寫。

df_v = pd.concat([df1, df2], axis=0)
print(df_v)
#          A    B   C    D
# ONE     A1   B1  C1  NaN
# TWO     A2   B2  C2  NaN
# THREE   A3   B3  C3  NaN
# TWO    NaN  NaN  C2   D2
# THREE  NaN  NaN  C3   D3
# FOUR   NaN  NaN  C4   D4

axis = 1,水平方向上連接。

df_h = pd.concat([df1, df2], axis=1)
print(df_h)
#          A    B    C    C    D
# ONE     A1   B1   C1  NaN  NaN
# TWO     A2   B2   C2   C2   D2
# THREE   A3   B3   C3   C3   D3
# FOUR   NaN  NaN  NaN   C4   D4

指定連接方法(外部連接/內部連接):join

參數join:指定列名(或行名)的并集,或者僅將公共部分保留。

join ='outer’是外部連接。列名(或行名)形成一個聯合,保留所有列(或行)。它是默認設置,因此可以省略不寫。在這種情況下,原始對象中列(或行)不存在的值將由的缺少值NaN代替。

join ='inner’是內部連接。僅保留具有相同列名(或行名)的列(或行)。

df_v_out = pd.concat([df1, df2], join='outer')
print(df_v_out)
# ? ? ? ? ?A ? ?B ? C ? ?D
# ONE ? ? A1 ? B1 ?C1 ?NaN
# TWO ? ? A2 ? B2 ?C2 ?NaN
# THREE ? A3 ? B3 ?C3 ?NaN
# TWO ? ?NaN ?NaN ?C2 ? D2
# THREE ?NaN ?NaN ?C3 ? D3
# FOUR ? NaN ?NaN ?C4 ? D4

df_v_in = pd.concat([df1, df2], join='inner')
print(df_v_in)
# ? ? ? ? C
# ONE ? ?C1
# TWO ? ?C2
# THREE ?C3
# TWO ? ?C2
# THREE ?C3
# FOUR ? C4

水平方向。

df_h_out = pd.concat([df1, df2], axis=1, join='outer')
print(df_h_out)
# ? ? ? ? ?A ? ?B ? ?C ? ?C ? ?D
# FOUR ? NaN ?NaN ?NaN ? C4 ? D4
# ONE ? ? A1 ? B1 ? C1 ?NaN ?NaN
# THREE ? A3 ? B3 ? C3 ? C3 ? D3
# TWO ? ? A2 ? B2 ? C2 ? C2 ? D2

df_h_in = pd.concat([df1, df2], axis=1, join='inner')
print(df_h_in)
# ? ? ? ? A ? B ? C ? C ? D
# TWO ? ?A2 ?B2 ?C2 ?C2 ?D2
# THREE ?A3 ?B3 ?C3 ?C3 ?D3

如何更改列名和行名,請參考下列連接。

01_Pandas.DataFrame的行名和列名的修改

pandas.DataFrame的連接

將pandas.DataFrames連接在一起時,返回的也是pandas.DataFrame類型的對象。

df_concat = pd.concat([df1, df2])
print(df_concat)
# ? ? ? ? ?A ? ?B ? C ? ?D
# ONE ? ? A1 ? B1 ?C1 ?NaN
# TWO ? ? A2 ? B2 ?C2 ?NaN
# THREE ? A3 ? B3 ?C3 ?NaN
# TWO ? ?NaN ?NaN ?C2 ? D2
# THREE ?NaN ?NaN ?C3 ? D3
# FOUR ? NaN ?NaN ?C4 ? D4

print(type(df_concat))
# <class 'pandas.core.frame.DataFrame'>

pandas.Series的連接

如果是pandas.Series之間的連接,則垂直連接(默認值axis= 0)返回的也是pandas.Series類型的對象。

s_v = pd.concat([s1, s2])
print(s_v)
# ONE ? ? ?X1
# TWO ? ? ?X2
# THREE ? ?X3
# TWO ? ? ?Y2
# THREE ? ?Y3
# FOUR ? ? Y4
# dtype: object

print(type(s_v))
# <class 'pandas.core.series.Series'>

axis = 1時,水平方向連接,返回pandas.DataFrame類型的對象。

s_h = pd.concat([s1, s2], axis=1)
print(s_h)
# ? ? ? ? ?X ? ?Y
# FOUR ? NaN ? Y4
# ONE ? ? X1 ?NaN
# THREE ? X3 ? Y3
# TWO ? ? X2 ? Y2

print(type(s_h))
# <class 'pandas.core.frame.DataFrame'>

也可以使用參數join。

s_h_in = pd.concat([s1, s2], axis=1, join='inner')
print(s_h_in)
#         X   Y
# TWO    X2  Y2
# THREE  X3  Y3

pandas.DataFrame和pandas.Series的連接

對于pandas.DataFrame和pandas.Series連接,水平連接(axis= 1)將pandas.Series添加為新列。列名稱是pandas.Series的名稱。

df_s_h = pd.concat([df1, s2], axis=1)
print(df_s_h)
#          A    B    C    Y
# FOUR   NaN  NaN  NaN   Y4
# ONE     A1   B1   C1  NaN
# THREE   A3   B3   C3   Y3
# TWO     A2   B2   C2   Y2

也可以使用參數join。

df_s_h_in = pd.concat([df1, s2], axis=1, join='inner')
print(df_s_h_in)
#         A   B   C   Y
# TWO    A2  B2  C2  Y2
# THREE  A3  B3  C3  Y3

垂直連接(axis = 0)。

df_s_v = pd.concat([df1, s2])
print(df_s_v)
#          A    B    C    0
# ONE     A1   B1   C1  NaN
# TWO     A2   B2   C2  NaN
# THREE   A3   B3   C3  NaN
# TWO    NaN  NaN  NaN   Y2
# THREE  NaN  NaN  NaN   Y3
# FOUR   NaN  NaN  NaN   Y4

添加行,可以在.loc中指定新的行名稱并分配值,或使用append()方法。

df1.loc['FOUR'] = ['A4', 'B4', 'C4']
print(df1)
# ? ? ? ? A ? B ? C
# ONE ? ?A1 ?B1 ?C1
# TWO ? ?A2 ?B2 ?C2
# THREE ?A3 ?B3 ?C3
# FOUR ? A4 ?B4 ?C4

s = pd.Series(['A5', 'B5', 'C5'], index=df1.columns, name='FIVE')
print(s)
# A ? ?A5
# B ? ?B5
# C ? ?C5
# Name: FIVE, dtype: object

df_append = df1.append(s)
print(df_append)
# ? ? ? ? A ? B ? C
# ONE ? ?A1 ?B1 ?C1
# TWO ? ?A2 ?B2 ?C2
# THREE ?A3 ?B3 ?C3
# FOUR ? A4 ?B4 ?C4
# FIVE ? A5 ?B5 ?C5

原文鏈接:https://blog.csdn.net/qq_18351157/article/details/104557778

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新