欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Pandas拼接concat使用方法

 更新時(shí)間:2023年12月04日 10:44:56   作者:金戈鐡馬  
當(dāng)我們需要將兩個(gè)Pandas DataFrame對(duì)象合并為一個(gè)時(shí),就需要使用Pandas拼接函數(shù),本文主要介紹了Pandas拼接concat使用方法,感興趣的可以了解一下

1.處理索引和軸

假設(shè)我們有2個(gè)關(guān)于考試成績(jī)的數(shù)據(jù)集。

df1 = pd.DataFrame({ 
    'name':['A','B','C','D'],
    'math':[60,89,82,70],
    'physics':[66, 95,83,66],
    'chemistry':[61,91,77,70] 
})
df2 = pd.DataFrame({ 
    'name':['E','F','G','H'],
    'math':[66,95,83,66],
    'physics':[60, 89,82,70],
    'chemistry':[90,81,78,90] 
})

最簡(jiǎn)單的用法就是傳遞一個(gè)含有DataFrames的列表,例如[df1, df2]。默認(rèn)情況下,它是沿axis=0垂直連接的,并且默認(rèn)情況下會(huì)保留df1和df2原來的索引。

pd.concat([df1,df2])

圖片

如果想要合并后忽略原來的索引,可以通過設(shè)置參數(shù)ignore_index=True,這樣索引就可以從0到n-1自動(dòng)排序了。

pd.concat([df1,df2],ignore_index = True)

圖片

如果想要沿水平軸連接兩個(gè)DataFrame,可以設(shè)置參數(shù)axis=1

pd.concat([df1,df2],axis = 1)

圖片

以上是一些基本操作,我們繼續(xù)往下看。

2.避免重復(fù)索引

我們知道了concat()函數(shù)會(huì)默認(rèn)保留原dataframe的索引。那有些情況,我想保留原來的索引,并且我還想驗(yàn)證合并后的結(jié)果是否有重復(fù)的索引,該怎么辦呢?

可以通過設(shè)置參數(shù)verify_integrity=True,將此設(shè)置True為時(shí),如果存在重復(fù)的索引,將會(huì)報(bào)錯(cuò)。比如下面這樣。

try:
    pd.concat([df1,df2], verify_integrity=True)
except ValueError as e:
    print('ValueError', e)
ValueError: Indexes have overlapping values: Int64Index([0, 1, 2, 3], dtype='int64')

3.使用keys和names選項(xiàng)添加層次結(jié)構(gòu)索引

添加層次結(jié)構(gòu)索引非常的有用,可以進(jìn)行更多層的數(shù)據(jù)分析。

舉個(gè)例子,某些情況下我們并不想合并兩個(gè)dataframe的索引,而是想為兩個(gè)數(shù)據(jù)集貼上標(biāo)簽。比如我們分別為df1df2添加標(biāo)簽Year 1Year 2。

這種情況,我們只需指定keys參數(shù)即可。

res = pd.concat([df1,df2],keys = ['Year 1','Year 2'])
res

圖片

如果我們想要獲取Year 1的數(shù)據(jù)集,可以直接使用loc像下面這樣操作:

res.loc['Year 1']

另外,參數(shù)names可用于為所得的層次索引添加名稱。例如,將名稱Class添加到剛創(chuàng)建的的標(biāo)簽上。

pd.concat(
    [df1,df2],
    keys = ['Year 1','Year 2'],
    names = ['Class',None],
)

圖片

如果要重置索引并將其轉(zhuǎn)換為數(shù)據(jù)列,可以使用 reset_index(),這一步操作也是非常的實(shí)用。

pd.concat(
    [df1, df2], 
    keys=['Year 1', 'Year 2'],
    names=['Class', None],
).reset_index(level=0)   
# reset_index(level='Class')

圖片

4.列匹配和排序

concat()函數(shù)還可以將合并后的列按不同順序排序。雖然,它會(huì)自動(dòng)將兩個(gè)df的列對(duì)齊合并。但默認(rèn)情況下,生成的DataFrame與第一個(gè)DataFrame具有相同的列排序。例如,在以下示例中,其順序與df1相同。

圖片

如果想要按字母順序?qū)Y(jié)果DataFrame進(jìn)行排序,則可以設(shè)置參數(shù)sort=True。

pd.concat([df1, df2], sort=True)

圖片

或者也可以自定義排序,像下面這樣:

custom_sort = ['math', 'chemistry', 'physics', 'name']
res = pd.concat([df1, df2])
res[custom_sort]

圖片

5.連接CSV文件數(shù)據(jù)集

假設(shè)我們需要從一堆CSV文件中加載并連接數(shù)據(jù)集。常規(guī)做法,我們可能會(huì)使用for循環(huán)解決,比如下面這樣。

import pathlib2 as pl2
ps = pl2.Path('data/sp3')
res = None
for p in ps.glob('*.csv'):
    if res is None:
        res = pd.read_csv(p)
    else:
        res = pd.concat([res, pd.read_csv(p)])

但上面pd.concat()在每次for循環(huán)迭代中都會(huì)被調(diào)用一次,效率不高,推薦使用列表推導(dǎo)式的寫法。

import pathlib2 as pl2
ps = pl2.Path('data/sp3')
dfs = (
    pd.read_csv(p, encoding='utf8') for p in ps.glob('*.csv')
)
res = pd.concat(dfs)
res

這樣就可以用一行代碼讀取所有CSV文件并生成DataFrames的列表dfs。然后,我們只需要調(diào)用pd.concat(dfs)一次即可獲得相同的結(jié)果,簡(jiǎn)潔高效。

使用%%timeit測(cè)試下上面兩種寫法的時(shí)間,第二種列表推導(dǎo)式大概省了一半時(shí)間。

# for-loop solution
298 ms ± 11.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
# list comprehension solution
153 ms ± 6 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

 到此這篇關(guān)于Pandas拼接concat使用方法的文章就介紹到這了,更多相關(guān)Pandas拼接concat內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 壓縮包密碼破解示例分享(類似典破解)

    壓縮包密碼破解示例分享(類似典破解)

    有一個(gè)壓縮包密碼忘了,寫了一個(gè)小腳本實(shí)現(xiàn)一個(gè)解密的功能,輸入自己常用密碼中的單詞后,腳本將這些密碼組合嘗試解壓壓縮包
    2014-01-01
  • python基礎(chǔ)之停用詞過濾詳解

    python基礎(chǔ)之停用詞過濾詳解

    這篇文章主要介紹了python基礎(chǔ)之停用詞過濾詳解,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python基礎(chǔ)的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-04-04
  • Python3 操作 MySQL 插入一條數(shù)據(jù)并返回主鍵 id的實(shí)例

    Python3 操作 MySQL 插入一條數(shù)據(jù)并返回主鍵 id的實(shí)例

    這篇文章主要介紹了Python3 操作 MySQL 插入一條數(shù)據(jù)并返回主鍵 id的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • python中pika模塊問題的深入探究

    python中pika模塊問題的深入探究

    這篇文章主要給大家介紹了關(guān)于python中pika模塊問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • Python讀寫Redis數(shù)據(jù)庫操作示例

    Python讀寫Redis數(shù)據(jù)庫操作示例

    Redis是一個(gè)開源的非關(guān)系型數(shù)據(jù)庫,它采用C語言編寫,是一個(gè)key-value存儲(chǔ)系統(tǒng),它存儲(chǔ)的value類型很多,包括string(字符串),list(鏈表),set(集合),zset(有序集合),hash(哈希)
    2014-03-03
  • Python解決%matplotlib inline標(biāo)紅底報(bào)錯(cuò)問題

    Python解決%matplotlib inline標(biāo)紅底報(bào)錯(cuò)問題

    在使用非Jupyter環(huán)境如Spyder或PyCharm時(shí),%matplotlib inline會(huì)因?yàn)槭荍upyter特有的魔法命令而導(dǎo)致報(bào)錯(cuò),這條命令是用于Jupyter Notebook或Jupyter Qt Console中,主要作用是將matplotlib的圖表直接嵌入到Notebook中顯示
    2024-09-09
  • Python Django框架單元測(cè)試之文件上傳測(cè)試示例

    Python Django框架單元測(cè)試之文件上傳測(cè)試示例

    這篇文章主要介紹了Python Django框架單元測(cè)試之文件上傳測(cè)試,結(jié)合實(shí)例形式分析了Django框架單元測(cè)試中文件上傳測(cè)試的操作步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-05-05
  • Python實(shí)現(xiàn)Kerberos用戶的增刪改查操作

    Python實(shí)現(xiàn)Kerberos用戶的增刪改查操作

    這篇文章主要介紹了Python實(shí)現(xiàn)Kerberos用戶的增刪改查操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Python爬取商家聯(lián)系電話以及各種數(shù)據(jù)的方法

    Python爬取商家聯(lián)系電話以及各種數(shù)據(jù)的方法

    今天小編就為大家分享一篇Python爬取商家聯(lián)系電話以及各種數(shù)據(jù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • python使用paramiko模塊通過ssh2協(xié)議對(duì)交換機(jī)進(jìn)行配置的方法

    python使用paramiko模塊通過ssh2協(xié)議對(duì)交換機(jī)進(jìn)行配置的方法

    今天小編就為大家分享一篇python使用paramiko模塊通過ssh2協(xié)議對(duì)交換機(jī)進(jìn)行配置的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07

最新評(píng)論