日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

pandas(六) -- 合并、连接、去重、替换

發(fā)布時(shí)間:2025/1/21 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pandas(六) -- 合并、连接、去重、替换 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
  • pd.merge()
  • pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,left_index=False, right_index=False, sort=True,suffixes=('x', 'y'), copy=True, indicator=False)

    參數(shù)

    left : DataFrame對(duì)象 right : DataFrame 或有名字的 Series 對(duì)象 how : 合并方式:{'left', 'right', 'outer', 'inner'},默認(rèn)是'inner',取交集* left/ right: 使用left/right的鍵連接* outer: 使用left和right的鍵,取并集* inner: 使用left和right相同的鍵,取交集 on : label or list.(列名或者index的名稱,用來連接兩個(gè)表的) left_on/right_on : label or list, or array-like(left/right 列名或者index的名稱) left_index/right_index : bool, default False(是否使用left/right的index作為連接的鍵值。) sort : bool, default False.如果為真,對(duì)鍵值排序,否則,鍵值順序取決于連接方式。 suffixes : tuple of (str, str), default ('_x', '_y')left和right重復(fù)的列名添加后綴名,以示區(qū)分。 copy : bool, default True. If False, avoid copy if possible. indicator : bool or str, default False validate : str, optional

    1.1 on

    ********** df1 **********A B key 0 A0 B0 K0 1 A1 B1 K1 2 A2 B2 K2 3 A3 B3 K3 ********** df2 **********C D key 0 C0 D0 K0 1 C1 D1 K1 2 C2 D2 K2 3 C3 D3 K3 pd.merge(df1, df2, on='key')

    通過df1和df2共同關(guān)鍵字‘key’,取交集

    ********** merge **********A B key C D 0 A0 B0 K0 C0 D0 1 A1 B1 K1 C1 D1 2 A2 B2 K2 C2 D2 3 A3 B3 K3 C3 D3
    • 多個(gè)關(guān)鍵字的情況
    pd.merge(df3, df4, on=['key1','key2'])

    通過df3, df4關(guān)鍵字’key1’,'key2’取相同值時(shí)合并。

    ********** df3 **********A B key1 key2 0 A0 B0 K0 K0 1 A1 B1 K0 K1 2 A2 B2 K1 K0 3 A3 B3 K2 K1 ********** df4 **********C D key1 key2 0 C0 D0 K0 K0 1 C1 D1 K1 K0 2 C2 D2 K1 K0 3 C3 D3 K2 K0A B key1 key2 C D 0 A0 B0 K0 K0 C0 D0 1 A2 B2 K1 K0 C1 D1 2 A2 B2 K1 K0 C2 D2
    • how = 'outer' 根據(jù)df3和df4所有關(guān)鍵字合并
      print(pd.merge(df3, df4, on=['key1','key2'], how = 'outer'))
      沒有響應(yīng)鍵值的取NaN
    A B key1 key2 C D 0 A0 B0 K0 K0 C0 D0 1 A1 B1 K0 K1 NaN NaN 2 A2 B2 K1 K0 C1 D1 3 A2 B2 K1 K0 C2 D2 4 A3 B3 K2 K1 NaN NaN 5 NaN NaN K2 K0 C3 D3
    • how = 'left' 根據(jù)df3的關(guān)鍵字合并。how = 'right' 是相似的
    print(pd.merge(df3, df4, on=['key1','key2'], how = 'left')) A B key1 key2 C D 0 A0 B0 K0 K0 C0 D0 1 A1 B1 K0 K1 NaN NaN 2 A2 B2 K1 K0 C1 D1 3 A2 B2 K1 K0 C2 D2 4 A3 B3 K2 K1 NaN NaN

    當(dāng)left和right沒有相同的關(guān)鍵字時(shí),使用參數(shù) left_on, right_on, left_index, right_index 來連接。
    left_on/ right_on : 類型 label or list left/right or array-like。 使用的關(guān)鍵字是什么
    left_index, right_index : 類型 bool。是否使用left/right的index作為關(guān)鍵字。
    { left_on, right_on} 和 { left_index, right_index}一起共有四種組合方式。
    介紹兩種:

    • left_on和right_on。df1, df2分別以關(guān)鍵字‘lkey’和‘rkey’連接
    ********** df1 **********data1 lkey 0 0 b 1 1 b 2 2 a 3 3 c 4 4 a 5 5 a 6 6 b ********** df2 **********date2 rkey 0 0 a 1 1 b 2 2 d pd.merge(df1, df2, left_on='lkey', right_on='rkey') data1 lkey date2 rkey 0 0 b 1 b 1 1 b 1 b 2 6 b 1 b 3 2 a 0 a 4 4 a 0 a 5 5 a 0 a
    • left_on和right_index。df1, df2分別以關(guān)鍵字‘lkey’和index連接。合并的關(guān)鍵字以left的列名作為關(guān)鍵字
    ********** df1 **********data1 key 0 0 a 1 1 b 2 2 c 3 3 d 4 4 f 5 5 e 6 6 g ********** df2 **********date2 a 100 b 101 c 102 d 103 e 104 pd.merge(df1, df2, left_on='key', right_index=True) data1 key date2 0 0 a 100 1 1 b 101 2 2 c 102 3 3 d 103 5 5 e 104
  • pd.concate()
    根據(jù)指定的axis連接pandas對(duì)象。默認(rèn)連接方式是’outer’.
  • pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,keys=None, levels=None, names=None, verify_integrity=False,copy=True) Parameters ---------- objs : a sequence or mapping of Series, DataFrame, or Panel objects。只有一個(gè)變量。 axis : {0/'index', 1/'columns'}, default 0 join : {'inner', 'outer'}, default 'outer' How to handle indexes on other axis(es) join_axes : list of Index objects Specific indexes to use for the other n - 1 axes instead of performinginner/outer set logic ignore_index : boolean, default False。如果為真,使用0,1,...,n-1作為新的索引keys : sequence, default NoneIf multiple levels passed, should contain tuples. Constructhierarchical index using the passed keys as the outermost level levels : list of sequences, default NoneSpecific levels (unique values) to use for constructing aMultiIndex. Otherwise they will be inferred from the keys names : list, default None verify_integrity : boolean, default False。檢測(cè)是否有重復(fù)的axis sort : boolean, default None.. versionadded:: 0.23.0 copy : boolean, default True If False, do not copy data unnecessarily
    • 默認(rèn)參數(shù)(axis = 0,垂直向下連接)
    s1 = pd.Series([1,2,3]) s2 = pd.Series([2,3,4]) print(pd.concat([s1,s2]))0 1 1 2 2 3 0 2 1 3 2 4
  • .replace()
    可一次性替換一個(gè)值或多個(gè)值。 可傳入列表或字典
  • s = pd.Series(list('ascaazsd')) print(s.replace('a', np.nan))#替換單個(gè)值 print(s.replace(['a','s'] ,np.nan))#多個(gè)值替換成同一值 print(s.replace({'a':'hello world!','s':123}))#多個(gè)值替換成不同值,用字典傳入 ********** 'a', np.nan ********** 0 NaN 1 s 2 c 3 NaN 4 NaN 5 z 6 s 7 d dtype: object ********** ['a','s'] ,np.nan ********** 0 NaN 1 NaN 2 c 3 NaN 4 NaN 5 z 6 NaN 7 d dtype: object ********** {'a':'hello world!','s':123} ********** 0 hello world! 1 123 2 c 3 hello world! 4 hello world! 5 z 6 123 7 d dtype: object
  • .duplicated()
  • s = pd.Series([1,1,1,1,2,2,2,3,4,5,5,5,5]) print(s.duplicated()) 0 False 1 True 2 True 3 True 4 False 5 True 6 True 7 False 8 False 9 False 10 True 11 True 12 True print(s[s.duplicated() == False])#s中的唯一項(xiàng)。效果與.unique()相似 0 1 4 2 7 3 8 4 9 5 dtype: int64

    s_re = s.drop_duplicates()# 去掉重復(fù)項(xiàng)。效果與.unique()相似

    0 1 4 2 7 3 8 4 9 5 dtype: int64

    總結(jié)

    以上是生活随笔為你收集整理的pandas(六) -- 合并、连接、去重、替换的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。