Pandas 新增數(shù)據(jù)
1. 前言
上一節(jié)我們講述了 Pandas 查詢數(shù)據(jù)的方法,以及查詢條件的幾種方式,能根據(jù)我們業(yè)務(wù)的需要,查詢出我么需要的數(shù)據(jù)集。而有時(shí)候我們的數(shù)據(jù)集在數(shù)量上或者內(nèi)容上不能夠滿足我們的分析需要,我們要對(duì)數(shù)據(jù)進(jìn)行擴(kuò)充,那在 Pandas 中我們?cè)撛趺床僮髂兀?/p>
Pandas 中為 DataFrame 提供了新增數(shù)據(jù)列和新增數(shù)據(jù)行的幾種方式,本小節(jié)我們將分別講述新增數(shù)據(jù)列和數(shù)據(jù)行的具體操作。
2. 新增數(shù)據(jù)列
2.1 直接新增數(shù)據(jù)列
直接新增數(shù)據(jù)列,需要傳入新增的列索引名,以及該列每行的數(shù)據(jù)項(xiàng)值:
# 導(dǎo)入pandas包
import pandas as pd
# 指定導(dǎo)入的文件地址 默認(rèn)是file,這里的路徑中省略了 file:/
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/第7,8,9,10小節(jié)/execl數(shù)據(jù)demo.xlsx"
data = pd.read_excel(data_path)
print(data)
# --- 輸出結(jié)果 ---
編程語言 推出時(shí)間 價(jià)格 主要?jiǎng)?chuàng)始人
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
# 新增數(shù)據(jù)列操作
data["new_colume"]=["a","b","c","d","e","f"]
print(data)
# --- 輸出結(jié)果 ---
編程語言 推出時(shí)間 價(jià)格 主要?jiǎng)?chuàng)始人 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,通過輸出結(jié)果可以看到,在數(shù)據(jù)集的最后一列新增了數(shù)據(jù)列內(nèi)容。
2.2 insert() 方法新增數(shù)據(jù)列
insert(loc, column, value, allow_duplicates=False) 函數(shù)可以實(shí)現(xiàn)向指定的列中添加數(shù)據(jù):
參數(shù)名 | 說明 |
---|---|
loc | 指定插入列的序號(hào),從0開始 |
column | 列索引名 |
value | 插入的列數(shù)據(jù) |
duplicates | 是否允許插入已有的數(shù)據(jù),如果為 False 插入重復(fù)數(shù)據(jù)會(huì)報(bào)錯(cuò) |
# 導(dǎo)入pandas包
import pandas as pd
# 指定導(dǎo)入的文件地址 默認(rèn)是file,這里的路徑中省略了 file:/
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/第7,8,9,10小節(jié)/execl數(shù)據(jù)demo.xlsx"
data = pd.read_excel(data_path)
print(data)
# --- 輸出結(jié)果 ---
編程語言 推出時(shí)間 價(jià)格 主要?jiǎng)?chuàng)始人
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() 函數(shù),在第1列插入列索引為 new 的數(shù)據(jù)列
data.insert(0,"new",["a","b","c","d","e","f"], allow_duplicates=False)
print(data)
# --- 輸出結(jié)果 ---
new 編程語言 推出時(shí)間 價(jià)格 主要?jiǎng)?chuàng)始人
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() 函數(shù)操作,我們看到輸出結(jié)果在第一列新增了數(shù)據(jù)列內(nèi)容。
3. 新增數(shù)據(jù)行
3.1 loc() 方法新增數(shù)據(jù)行
通過 loc() 函數(shù)指定要新增的行索引值,傳入對(duì)應(yīng)的列數(shù)據(jù)內(nèi)容即可:
# 導(dǎo)入pandas包
import pandas as pd
# 指定導(dǎo)入的文件地址 默認(rèn)是file,這里的路徑中省略了 file:/
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/第7,8,9,10小節(jié)/execl數(shù)據(jù)demo.xlsx"
data = pd.read_excel(data_path)
print(data)
# --- 輸出結(jié)果 ---
編程語言 推出時(shí)間 價(jià)格 主要?jiǎng)?chuàng)始人
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 ,右側(cè)為插入的列數(shù)據(jù)內(nèi)容
data.loc[6]=["ss","dd","23.1","ff"]
print(data)
# --- 輸出結(jié)果 ---
編程語言 推出時(shí)間 價(jià)格 主要?jiǎng)?chuàng)始人
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
輸出解析:這里可以看到在原數(shù)據(jù)的基礎(chǔ)上新增了行索引為 6 的數(shù)據(jù)行。但這里要注意,如果行索引指定的是已存在行索引,則不會(huì)進(jìn)行數(shù)據(jù)行的插入,而是替換了該數(shù)據(jù)行的數(shù)據(jù)值,如下程序演示:
# 這里我們指定行索引為 5 的值
data.loc[5]=["ss","dd","23.1","ff"]
print(data)
# --- 輸出結(jié)果 ---
編程語言 推出時(shí)間 價(jià)格 主要?jiǎng)?chuàng)始人
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
輸出解析:通過結(jié)果可以看到,行索引為5的原數(shù)據(jù)為: C++ ,1983年,75,Bjarne Stroustrup,通過操作并沒有新增數(shù)據(jù)行,而是將該行的數(shù)據(jù)改為了:ss,dd,23.1, ff
3.2 append() 方法新增數(shù)據(jù)行
append(other, ignore_index=False, verify_integrity=False) 是用來在數(shù)據(jù)表尾新增數(shù)據(jù)行,并返回新增后的數(shù)據(jù)對(duì)象,該方法不僅僅適用于 DataFrame 結(jié)構(gòu)的數(shù)據(jù),還可以用于 Series 數(shù)據(jù)的追加。
參數(shù)名 | 說明 |
---|---|
other | 要添加的數(shù)據(jù),可以是 Series、list、dict、dataframe 等等; |
ignore_index | 新增了數(shù)據(jù)后,會(huì)重新設(shè)置索引,忽略舊的索引; |
verify_integrity | 當(dāng)為 True 時(shí),如果和原數(shù)據(jù)的索引值相同,將會(huì)報(bào)錯(cuò); |
# 新建一個(gè) DataFrame 對(duì)象
data_new= pd.DataFrame([["11","22","33.5","44"], ["55","66","77.7","88"]],
columns=["編程語言","推出時(shí)間","價(jià)格","主要?jiǎng)?chuàng)始人"])
# 對(duì) data 使用 append 操作,傳入新創(chuàng)建的 DataFrame 對(duì)象
result_data=data.append(data_new)
print(result_data)
# --- 輸出結(jié)果 ---
編程語言 推出時(shí)間 價(jià)格 主要?jiǎng)?chuàng)始人
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() 操作是將兩個(gè)數(shù)據(jù)集進(jìn)行行的合并,在 data 數(shù)據(jù)集的基礎(chǔ)上,后面合并 data_new 數(shù)據(jù)行。這里的索引并不會(huì)產(chǎn)生沖突,因?yàn)槲覀儧]有設(shè)置 verify_integrity=True(默認(rèn)的是為 False),如果我們?cè)O(shè)置了 ignore_index= True ,合并后生成的新的數(shù)據(jù)集索引值會(huì)重新排列,如下操作所示:
data_new= pd.DataFrame([["11","22","33.5","44"], ["55","66","77.7","88"]],
columns=["編程語言","推出時(shí)間","價(jià)格","主要?jiǎng)?chuàng)始人"])
result_data=data.append(data_new, ignore_index= True)
print(result_data)
# --- 輸出結(jié)果 ---
編程語言 推出時(shí)間 價(jià)格 主要?jiǎng)?chuàng)始人
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
輸出解析:這里可以看到通過設(shè)置 ignore_index= True 屬性,返回的數(shù)據(jù)對(duì)象的行索引從0開始重新進(jìn)行了排列。
3.小結(jié)
本節(jié)課我們主要學(xué)習(xí)了新增數(shù)據(jù)行和數(shù)據(jù)列的幾種方式,以及新增操作過程中需要注意的地方。本節(jié)課程的重點(diǎn)如下:
- 直接新增數(shù)據(jù)列的操作方法;
- insert() 方法新增數(shù)據(jù)列的操作以及與直接新增方式的不同;
- loc() 新增數(shù)據(jù)行的操作;
- append() 新增數(shù)據(jù)行的操縱以及與 loc() 操作之間的不同。
Tips:想要學(xué)習(xí)更多Pandas相關(guān)知識(shí),可以點(diǎn)擊
Pandas 修改數(shù)據(jù)
Pandas 刪除數(shù)據(jù)
Pandas 查詢數(shù)據(jù)