Pandas 新增數據
1. 前言
上一節我們講述了 Pandas 查詢數據的方法,以及查詢條件的幾種方式,能根據我們業務的需要,查詢出我么需要的數據集。而有時候我們的數據集在數量上或者內容上不能夠滿足我們的分析需要,我們要對數據進行擴充,那在 Pandas 中我們該怎么操作呢?
Pandas 中為 DataFrame 提供了新增數據列和新增數據行的幾種方式,本小節我們將分別講述新增數據列和數據行的具體操作。
2. 新增數據列
2.1 直接新增數據列
直接新增數據列,需要傳入新增的列索引名,以及該列每行的數據項值:
# 導入pandas包
import pandas as pd
# 指定導入的文件地址 默認是file,這里的路徑中省略了 file:/
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/第7,8,9,10小節/execl數據demo.xlsx"
data = pd.read_excel(data_path)
print(data)
# --- 輸出結果 ---
編程語言 推出時間 價格 主要創始人
0 java 1995年 45.6 James Gosling
1 python 1991年 67.0 Guido van Rossum
2 C 1972年 33.9 Dennis MacAlistair Ritchie
3 js 1995年 59.5 Brendan Eich
4 php 2012年 69.9 Rasmus Lerdorf
5 C++ 1983年 75.0 Bjarne Stroustrup
# 新增數據列操作
data["new_colume"]=["a","b","c","d","e","f"]
print(data)
# --- 輸出結果 ---
編程語言 推出時間 價格 主要創始人 new_colume
0 java 1995年 45.6 James Gosling a
1 python 1991年 67.0 Guido van Rossum b
2 C 1972年 33.9 Dennis MacAlistair Ritchie c
3 js 1995年 59.5 Brendan Eich d
4 php 2012年 69.9 Rasmus Lerdorf e
5 C++ 1983年 75.0 Bjarne Stroustrup f
輸出解析:我們通過操作新增 new_colume 列,并指定行值分別為a,b,c,d,e,f,通過輸出結果可以看到,在數據集的最后一列新增了數據列內容。
2.2 insert() 方法新增數據列
insert(loc, column, value, allow_duplicates=False) 函數可以實現向指定的列中添加數據:
參數名 | 說明 |
---|---|
loc | 指定插入列的序號,從0開始 |
column | 列索引名 |
value | 插入的列數據 |
duplicates | 是否允許插入已有的數據,如果為 False 插入重復數據會報錯 |
# 導入pandas包
import pandas as pd
# 指定導入的文件地址 默認是file,這里的路徑中省略了 file:/
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/第7,8,9,10小節/execl數據demo.xlsx"
data = pd.read_excel(data_path)
print(data)
# --- 輸出結果 ---
編程語言 推出時間 價格 主要創始人
0 java 1995年 45.6 James Gosling
1 python 1991年 67.0 Guido van Rossum
2 C 1972年 33.9 Dennis MacAlistair Ritchie
3 js 1995年 59.5 Brendan Eich
4 php 2012年 69.9 Rasmus Lerdorf
5 C++ 1983年 75.0 Bjarne Stroustrup
# 通過 insert() 函數,在第1列插入列索引為 new 的數據列
data.insert(0,"new",["a","b","c","d","e","f"], allow_duplicates=False)
print(data)
# --- 輸出結果 ---
new 編程語言 推出時間 價格 主要創始人
0 a java 1995年 45.6 James Gosling
1 b python 1991年 67.0 Guido van Rossum
2 c C 1972年 33.9 Dennis MacAlistair Ritchie
3 d js 1995年 59.5 Brendan Eich
4 e php 2012年 69.9 Rasmus Lerdorf
5 f C++ 1983年 75.0 Bjarne Stroustrup
輸出解析:通過 insert() 函數操作,我們看到輸出結果在第一列新增了數據列內容。
3. 新增數據行
3.1 loc() 方法新增數據行
通過 loc() 函數指定要新增的行索引值,傳入對應的列數據內容即可:
# 導入pandas包
import pandas as pd
# 指定導入的文件地址 默認是file,這里的路徑中省略了 file:/
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/第7,8,9,10小節/execl數據demo.xlsx"
data = pd.read_excel(data_path)
print(data)
# --- 輸出結果 ---
編程語言 推出時間 價格 主要創始人
0 java 1995年 45.6 James Gosling
1 python 1991年 67.0 Guido van Rossum
2 C 1972年 33.9 Dennis MacAlistair Ritchie
3 js 1995年 59.5 Brendan Eich
4 php 2012年 69.9 Rasmus Lerdorf
5 C++ 1983年 75.0 Bjarne Stroustrup
# 通過 loc() 傳入插入的行索引為 6 ,右側為插入的列數據內容
data.loc[6]=["ss","dd","23.1","ff"]
print(data)
# --- 輸出結果 ---
編程語言 推出時間 價格 主要創始人
0 java 1995年 45.6 James Gosling
1 python 1991年 67 Guido van Rossum
2 C 1972年 33.9 Dennis MacAlistair Ritchie
3 js 1995年 59.5 Brendan Eich
4 php 2012年 69.9 Rasmus Lerdorf
5 C++ 1983年 75 Bjarne Stroustrup
6 ss dd 23.1 ff
輸出解析:這里可以看到在原數據的基礎上新增了行索引為 6 的數據行。但這里要注意,如果行索引指定的是已存在行索引,則不會進行數據行的插入,而是替換了該數據行的數據值,如下程序演示:
# 這里我們指定行索引為 5 的值
data.loc[5]=["ss","dd","23.1","ff"]
print(data)
# --- 輸出結果 ---
編程語言 推出時間 價格 主要創始人
0 java 1995年 45.6 James Gosling
1 python 1991年 67 Guido van Rossum
2 C 1972年 33.9 Dennis MacAlistair Ritchie
3 js 1995年 59.5 Brendan Eich
4 php 2012年 69.9 Rasmus Lerdorf
5 ss dd 23.1 ff
輸出解析:通過結果可以看到,行索引為5的原數據為: C++ ,1983年,75,Bjarne Stroustrup,通過操作并沒有新增數據行,而是將該行的數據改為了:ss,dd,23.1, ff
3.2 append() 方法新增數據行
append(other, ignore_index=False, verify_integrity=False) 是用來在數據表尾新增數據行,并返回新增后的數據對象,該方法不僅僅適用于 DataFrame 結構的數據,還可以用于 Series 數據的追加。
參數名 | 說明 |
---|---|
other | 要添加的數據,可以是 Series、list、dict、dataframe 等等; |
ignore_index | 新增了數據后,會重新設置索引,忽略舊的索引; |
verify_integrity | 當為 True 時,如果和原數據的索引值相同,將會報錯; |
# 新建一個 DataFrame 對象
data_new= pd.DataFrame([["11","22","33.5","44"], ["55","66","77.7","88"]],
columns=["編程語言","推出時間","價格","主要創始人"])
# 對 data 使用 append 操作,傳入新創建的 DataFrame 對象
result_data=data.append(data_new)
print(result_data)
# --- 輸出結果 ---
編程語言 推出時間 價格 主要創始人
0 java 1995年 45.6 James Gosling
1 python 1991年 67 Guido van Rossum
2 C 1972年 33.9 Dennis MacAlistair Ritchie
3 js 1995年 59.5 Brendan Eich
4 php 2012年 69.9 Rasmus Lerdorf
5 C++ 1983年 75 Bjarne Stroustrup
0 11 22 33.5 44
1 55 66 77.7 88
輸出解析:這里可以看到通過 append() 操作是將兩個數據集進行行的合并,在 data 數據集的基礎上,后面合并 data_new 數據行。這里的索引并不會產生沖突,因為我們沒有設置 verify_integrity=True(默認的是為 False),如果我們設置了 ignore_index= True ,合并后生成的新的數據集索引值會重新排列,如下操作所示:
data_new= pd.DataFrame([["11","22","33.5","44"], ["55","66","77.7","88"]],
columns=["編程語言","推出時間","價格","主要創始人"])
result_data=data.append(data_new, ignore_index= True)
print(result_data)
# --- 輸出結果 ---
編程語言 推出時間 價格 主要創始人
0 java 1995年 45.6 James Gosling
1 python 1991年 67 Guido van Rossum
2 C 1972年 33.9 Dennis MacAlistair Ritchie
3 js 1995年 59.5 Brendan Eich
4 php 2012年 69.9 Rasmus Lerdorf
5 C++ 1983年 75 Bjarne Stroustrup
6 11 22 33.5 44
7 55 66 77.7 88
輸出解析:這里可以看到通過設置 ignore_index= True 屬性,返回的數據對象的行索引從0開始重新進行了排列。
3.小結
本節課我們主要學習了新增數據行和數據列的幾種方式,以及新增操作過程中需要注意的地方。本節課程的重點如下:
- 直接新增數據列的操作方法;
- insert() 方法新增數據列的操作以及與直接新增方式的不同;
- loc() 新增數據行的操作;
- append() 新增數據行的操縱以及與 loc() 操作之間的不同。
Tips:想要學習更多Pandas相關知識,可以點擊
Pandas 修改數據
Pandas 刪除數據
Pandas 查詢數據