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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python文件可以包括任何数据内容_python 文件数据合并(数据行不对应)?

發布時間:2023/12/15 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python文件可以包括任何数据内容_python 文件数据合并(数据行不对应)? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這里我們討論如何利用concat方法進行簡單的數據拼接。

import pandas as pd

ser1 = pd.Series(['A','B','C'], index=[1,2,3])

ser2 = pd.Series(['D','E','F'], index=[4,5,6])

ser = pd.concat([ser1,ser2])

print(ser1)

print(ser2)

print(ser)

1 A

2 B

3 C

dtype: object

4 D

5 E

6 F

dtype: object

1 A

2 B

3 C

4 D

5 E

6 F

dtype: object

在這個例子中,我們簡單的對Series進行了拼接,我們看到默認的情況是逐行進行合并操作,對DataFrame對象進行簡單拼接也是一樣。

import pandas as pd

df1 = pd.DataFrame({'A':{'1':'A1','2':'A2'},'B':{'1':'B1','2':'B2'}})

df2 = pd.DataFrame({'A':{'3':'A3','4':'A4'},'B':{'3':'B3','4':'B4'}})

print(df1)

print(df2)

print(pd.concat([df1,df2]))

A B

1 A1 B1

2 A2 B2

A B

3 A3 B3

4 A4 B4

A B

1 A1 B1

2 A2 B2

3 A3 B3

4 A4 B4

通過這種方法,我們也是以逐行的方式對兩個DataFrame進行了合并。

很自然的,相對于逐行進行合并,也可以按逐列的方式進行合并,類比之前講過的,加上一個axis參數即可:

import pandas as pd

import numpy as np

df1 = pd.DataFrame({'A':{'1':'A1','2':'A2'},'B':{'1':'B1','2':'B2'}})

df2 = pd.DataFrame({'C':{'1':'C1','2':'C4'},'D':{'1':'D1','2':'D2'}})

print(df1)

print(df2)

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

A B

1 A1 B1

2 A2 B2

C D

1 C1 D1

2 C4 D2

A B C D

1 A1 B1 C1 D1

2 A2 B2 C4 D2

上面的例子舉得比較特殊,刻意設置了兩個DataFrame數據的索引是不同的,如果恰好他們的索引相同,會不會出問題。

這個問題提的不錯,Pandas中concat方法的一個很大的特點就是保留索引,合并后的結果里各行的索引與合并前的索引保持一致。

import pandas as pd

df1 = pd.DataFrame({'A':{'1':'A1','2':'A2'},'B':{'1':'B1','2':'B2'}})

df2 = pd.DataFrame({'A':{'1':'A3','2':'A4'},'B':{'1':'B3','2':'B4'}})

print(pd.concat([df1,df2]))

A B

1 A1 B1

2 A2 B2

1 A3 B3

2 A4 B4

可以看到,結果并沒有報錯,而且確實是保留了合并前的索引。但是這并不是我們想看到的,因為這樣一來,A1、A3兩項的索引就是完全一樣了。

那就眼睜睜的看著這種情況發生嗎?

當然不是,解決的方法有兩種:

第一種就是忽略這種索引,如果索引是這種沒有實際意義的流水ID,那么我們可以讓他們順次的往下排列,從而避免重復,設置一個ignore_index即可實現。

import pandas as pd

df1 = pd.DataFrame({'A':{'1':'A1','2':'A2'},'B':{'1':'B1','2':'B2'}})

df2 = pd.DataFrame({'A':{'1':'A3','2':'A4'},'B':{'1':'B3','2':'B4'}})

print(df1)

print(df2)

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

A B

1 A1 B1

2 A2 B2

A B

1 A3 B3

2 A4 B4

A B

0 A1 B1

1 A2 B2

2 A3 B3

3 A4 B4

那如果我覺得原來的索引代表了實際意義,不能忽略呢?

別急,第二種方法就是利用多級索引的方式來保留原索引。

import pandas as pd

df1 = pd.DataFrame({'A':{'1':'A1','2':'A2'},'B':{'1':'B1','2':'B2'}})

df2 = pd.DataFrame({'A':{'1':'A3','2':'A4'},'B':{'1':'B3','2':'B4'}})

print(df1)

print(df2)

print(pd.concat([df1,df2], keys=['x','y']))

A B

1 A1 B1

2 A2 B2

A B

1 A3 B3

2 A4 B4

A B

x 1 A1 B1

2 A2 B2

y 1 A3 B3

2 A4 B4

還漏了一種情況,就是如果列名不完全一致應該如何處理?

我們繼續看看在合并的過程中,列會出現什么現象。

import pandas as pd

df1 = pd.DataFrame({'A':{'1':'A1','2':'A2'},'B':{'1':'B1','2':'B2'},'C':{'1':'C1','2':'C2'}})

df2 = pd.DataFrame({'B':{'3':'B3','4':'B4'},'C':{'3':'C3','4':'C4'},'D':{'3':'D3','4':'D4'}})

print(df1)

print(df2)

print(pd.concat([df1,df2]))

A B C

1 A1 B1 C1

2 A2 B2 C2

B C D

3 B3 C3 D3

4 B4 C4 D4

A B C D

1 A1 B1 C1 NaN

2 A2 B2 C2 NaN

3 NaN B3 C3 D3

4 NaN B4 C4 D4

從結果中我們可以看出,我們這種默認的合并方式是對所有的輸入列取并集,如果在某個位置上值缺失,則用NaN值來代替。

如果我們想換一種方式,對輸入列取交集,這樣就不會出現NaN值了。

import pandas as pd

df1 = pd.DataFrame({'A':{'1':'A1','2':'A2'},'B':{'1':'B1','2':'B2'},'C':{'1':'C1','2':'C2'}})

df2 = pd.DataFrame({'B':{'3':'B3','4':'B4'},'C':{'3':'C3','4':'C4'},'D':{'3':'D3','4':'D4'}})

print(df1)

print(df2)

print(pd.concat([df1,df2], join='inner'))

A B C

1 A1 B1 C1

2 A2 B2 C2

B C D

3 B3 C3 D3

4 B4 C4 D4

B C

1 B1 C1

2 B2 C2

3 B3 C3

4 B4 C4

當然,我們還可以指定任何一個合并項的列來作為最后結果的使用列:

import pandas as pd

df1 = pd.DataFrame({'A':{'1':'A1','2':'A2'},'B':{'1':'B1','2':'B2'},'C':{'1':'C1','2':'C2'}})

df2 = pd.DataFrame({'B':{'3':'B3','4':'B4'},'C':{'3':'C3','4':'C4'},'D':{'3':'D3','4':'D4'}})

print(df1)

print(df2)

print(pd.concat([df1, df2], join_axes=[df1.columns]))

A B C

1 A1 B1 C1

2 A2 B2 C2

B C D

3 B3 C3 D3

4 B4 C4 D4

A B C

1 A1 B1 C1

2 A2 B2 C2

3 NaN B3 C3

4 NaN B4 C4

關于數據科學更系統、更深入的探討可進入我們的專欄《Python數據科學之路》:醬油哥:來吧,一起踏上Python數據科學之路?zhuanlan.zhihu.com

本專欄模仿美劇劇集編排分為五季,第一季:Python編程語言核心基礎、第二季:Python數據分析基本工具、第三季:Python語言描述的數學基礎、第四季:機器學習典型算法專題、第五季:實戰熱點深度應用。

總結

以上是生活随笔為你收集整理的python文件可以包括任何数据内容_python 文件数据合并(数据行不对应)?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。