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

學無先后,達者為師

網站首頁 編程語言 正文

Python?pandas?DataFrame數據拼接方法_python

作者:勤奮的大熊貓 ? 更新時間: 2022-09-03 編程語言

前言

在pandas模塊中,通常我們都需要對類型為DataFrame的數據進行操作,其中最為常見的操作便是拼接了。比如我們將兩個Excel表格中的數據讀入,隨后拼接完成后保存進一個新的Excel表格文件中。之前查找了相關的博客, 發現網絡上魚龍混雜。有些代碼完全無法執行,為了提高效率,這里做一個詳細地記錄。

DataFrame數據拼接方法一:使用.append()方法。

# -*- coding:utf-8 -*-
import pandas as pd

df1 = pd.DataFrame([[1, 2], [3, 4]])
df2 = pd.DataFrame([[5, 6], [7, 8]])

df = df1.append(df2)

print("df1的值為:")
print(df1)
print("df2的值為:")
print(df2)
print("df的值為:")
print(df)
"""
運行結果:
df1的值為:
   0  1
0  1  2
1  3  4
df2的值為:
   0  1
0  5  6
1  7  8
df的值為:
   0  1
0  1  2
1  3  4
0  5  6
1  7  8
"""

我們可以看到,首先我們使用了類似于list列表的操作方式,使用.append()方法對df1與df2數據進行了操作,但是需要注意的是,不同于對列表對象的操作,這里的df1仍舊為原來的df1所擁有的內容,而我們賦值的對象df才是保存了二者拼接以后的結果。 所以記得一定要單獨執行賦值才可以得到正確的結果?。?!其次我們看到結果其實是有些問題的,df結果中的縱向索引值為0,1,0,1,仍舊保留了我們拼接前各自的索引值,這是不被我們需要的,因此我們需要設置 ignore_index=True來對索引值進行重新排列。代碼如下:

# -*- coding:utf-8 -*-
import pandas as pd

df1 = pd.DataFrame([[1, 2], [3, 4]])
df2 = pd.DataFrame([[5, 6], [7, 8]])

df = df1.append(df2,  ignore_index=True)

print("df1的值為:")
print(df1)
print("df2的值為:")
print(df2)
print("df的值為:")
print(df)
"""
運行結果:
df1的值為:
   0  1
0  1  2
1  3  4
df2的值為:
   0  1
0  5  6
1  7  8
df的值為:
   0  1
0  1  2
1  3  4
2  5  6
3  7  8
"""

我們可以看到,此時的縱向索引值變正常了。

注意: df1 = pd.DataFrame([[1, 2], [3, 4]])創建DataFrame類型的數據時要使用雙層中括號,單層中括號會導致數據縱向排列。

DataFrame數據拼接方法二:使用.concat()方法。

# -*- coding:utf-8 -*-
import pandas as pd

df1 = pd.DataFrame([[1, 2], [3, 4]])
df2 = pd.DataFrame([[5, 6], [7, 8]])

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

print("df1的值為:")
print(df1)
print("df2的值為:")
print(df2)
print("df的值為:")
print(df)
"""
運行結果:
df1的值為:
   0  1
0  1  2
1  3  4
df2的值為:
   0  1
0  5  6
1  7  8
df的值為:
   0  1
0  1  2
1  3  4
2  5  6
3  7  8
"""

我們可以看到成功實現了拼接。

但是這樣并不美觀,我們發現,我們的縱向index還是用0,1在表示,那么我們可不可以自定義縱向index呢?答案是可以的,請看如下代碼:

import pandas as pd

df1 = pd.DataFrame([[1, 2], [3, 4]], columns=["column1", "column2"])
df2 = pd.DataFrame([[5, 6], [7, 8]], columns=["column1", "column2"])

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

print("df1的值為:")
print(df1)
print("df2的值為:")
print(df2)
print("df的值為:")
print(df)
"""
運行結果:
df1的值為:
   column1  column2
0        1        2
1        3        4
df2的值為:
   column1  column2
0        5        6
1        7        8
df的值為:
   column1  column2
0        1        2
1        3        4
2        5        6
3        7        8
"""

至此,DataFrame的拼接問題暫時告一段落,當然還存在其他方法,以后有機會了再補充,這兩種方法均為比較直觀和簡潔的方法。推薦使用。此外, pd.concat()函數也適用于多個DataFrame的拼接, 只要將第一個參數變為一個列表,涵蓋所有的DataFrame名稱即可,如[df1, df2, df3]。

補充:Python同時合并多個DataFrame

pandas的merge函數只能同時合并三個dataframe,如果涉及到合并多個dataframe就比較麻煩

這種情況下我們可以創建一個我們需要合并的列表,然后將他們一次性合并在一起

# merge any number of dataframes
from functools import reduce
df_groups = [df2, group1, group2, group3, group4, group5, group6, group7, group8]
df_merged = reduce(lambda left, right: pd.merge(left, right, on=['title']), df_groups)
df_merged.head()

總結

原文鏈接:https://blog.csdn.net/u011699626/article/details/116406070

欄目分類
最近更新