亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Pandas-DataFrame知識點匯總

 更新時間:2022年03月15日 16:48:54   作者:文哥的學習日記  
這篇文章主要介紹了Pandas-DataFrame知識點匯總,DataFrame是一種表格型數(shù)據(jù)結(jié)構(gòu),它含有一組有序的列,每列可以是不同的值,下面我們一起進入文章了解更多詳細內(nèi)容吧,需要的小伙伴也可以參考一下

1、DataFrame的創(chuàng)建

DataFrame是一種表格型數(shù)據(jù)結(jié)構(gòu),它含有一組有序的列,每列可以是不同的值。DataFrame既有行索引,也有列索引,它可以看作是由Series組成的字典,不過這些Series公用一個索引。
DataFrame的創(chuàng)建有多種方式,不過最重要的還是根據(jù)dict進行創(chuàng)建,以及讀取csv或者txt文件來創(chuàng)建。這里主要介紹這兩種方式。

根據(jù)字典創(chuàng)建

data = {
? ? 'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],
? ? 'year':[2000,2001,2002,2001,2002],
? ? 'pop':[1.5,1.7,3.6,2.4,2.9]
}
frame = pd.DataFrame(data)
frame

#輸出
? ? pop state ? year
0 ? 1.5 Ohio ? ?2000
1 ? 1.7 Ohio ? ?2001
2 ? 3.6 Ohio ? ?2002
3 ? 2.4 Nevada ?2001
4 ? 2.9 Nevada ?2002

DataFrame的行索引是index,列索引是columns,我們可以在創(chuàng)建DataFrame時指定索引的值:

frame2 = pd.DataFrame(data,index=['one','two','three','four','five'],columns=['year','state','pop','debt'])
frame2

#輸出
? ? year ? ?state ? pop debt
one 2000 ? ?Ohio ? ?1.5 NaN
two 2001 ? ?Ohio ? ?1.7 NaN
three ? 2002 ? ?Ohio ? ?3.6 NaN
four ? ?2001 ? ?Nevada ?2.4 NaN
five ? ?2002 ? ?Nevada ?2.9 NaN

使用嵌套字典也可以創(chuàng)建DataFrame,此時外層字典的鍵作為列,內(nèi)層鍵則作為索引:

pop = {'Nevada':{2001:2.4,2002:2.9},'Ohio':{2000:1.5,2001:1.7,2002:3.6}}
frame3 = pd.DataFrame(pop)
frame3
#輸出
? ? Nevada ?Ohio
2000 ? ?NaN 1.5
2001 ? ?2.4 1.7
2002 ? ?2.9 3.6

我們可以用index,columnsvalues來訪問DataFrame的行索引,列索引以及數(shù)據(jù)值,數(shù)據(jù)值返回的是一個二維的ndarray

frame2.values
#輸出
array([[2000, 'Ohio', 1.5, 0],
? ? ? ?[2001, 'Ohio', 1.7, 1],
? ? ? ?[2002, 'Ohio', 3.6, 2],
? ? ? ?[2001, 'Nevada', 2.4, 3],
? ? ? ?[2002, 'Nevada', 2.9, 4]], dtype=object)

讀取文件

讀取文件生成DataFrame最常用的是read_csv,read_table方法。

該方法中幾個重要的參數(shù)如下所示:

參數(shù)描述
header默認第一行為columns,如果指定header=None,則表明沒有索引行,第一行就是數(shù)據(jù)
index_col默認作為索引的為第一列,可以設(shè)為index_col為-1,表明沒有索引列
nrows表明讀取的行數(shù)
sep或delimiter分隔符,read_csv默認是逗號,而read_table默認是制表符\t
encoding編碼格式

其他創(chuàng)建DataFrame的方式有很多,比如我們可以通過讀取mysql或者mongoDB來生成,也可以讀取json文件等等,這里就不再介紹。

2、DataFrame軸的概念

DataFrame的處理中經(jīng)常會遇到軸的概念,這里先給大家一個直觀的印象,我們所說的axis=0即表示沿著每一列或行標簽\索引值向下執(zhí)行方法,axis=1即表示沿著每一行或者列標簽?zāi)O驁?zhí)行對應(yīng)的方法。

3、DataFrame一些性質(zhì)

索引、切片

我們可以根據(jù)列名來選取一列,返回一個Series:

frame2['year']
#輸出
one ? ? ?2000
two ? ? ?2001
three ? ?2002
four ? ? 2001
five ? ? 2002
Name: year, dtype: int64

我們還可以選取多列或者多行:

data = pd.DataFrame(np.arange(16).reshape((4,4)),index = ['Ohio','Colorado','Utah','New York'],columns=['one','two','three','four'])
data[['two','three']]
#輸出
? ? two three
Ohio ? ?1 ? 2
Colorado ? ?5 ? 6
Utah ? ?9 ? 10
New York ? ?13 ?14

#取行
data[:2]
#輸出
? ? one two three ? four
Ohio ? ?0 ? 1 ? 2 ? 3
Colorado ? ?4 ? 5 ? 6 ? 7

當然,在選取數(shù)據(jù)的時候,我們還可以根據(jù)邏輯條件來選?。?/strong>

data[data['three']>5]
#輸出
? ? one two three ? four
Colorado ? ?4 ? 5 ? 6 ? 7
Utah ? ?8 ? 9 ? 10 ?11
New York ? ?12 ?13 ?14 ?15

pandas提供了專門的用于索引DataFrame的方法,即使用ix方法進行索引,不過ix在最新的版本中已經(jīng)被廢棄了,如果要是用標簽,最好使用loc方法,如果使用下標,最好使用iloc方法:

#data.ix['Colorado',['two','three']]
data.loc['Colorado',['two','three']]
#輸出
two ? ? ?5
three ? ?6
Name: Colorado, dtype: int64

data.iloc[0:3,2]
#輸出
Ohio ? ? ? ? 2
Colorado ? ? 6
Utah ? ? ? ?10
Name: three, dtype: int64

修改數(shù)據(jù)

可以使用一個標量修改DataFrame中的某一列,此時這個標量會廣播到DataFrame的每一行上:

data = {
? ? 'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],
? ? 'year':[2000,2001,2002,2001,2002],
? ? 'pop':[1.5,1.7,3.6,2.4,2.9]
}
frame2 = pd.DataFrame(data,index=['one','two','three','four','five'],columns=['year','state','pop','debt'])
frame2
frame2['debt']=16.5
frame2
#輸出
year ? ?state ? pop debt
one 2000 ? ?Ohio ? ?1.5 16.5
two 2001 ? ?Ohio ? ?1.7 16.5
three ? 2002 ? ?Ohio ? ?3.6 16.5
four ? ?2001 ? ?Nevada ?2.4 16.5
five ? ?2002 ? ?Nevada ?2.9 16.5

也可以使用一個列表來修改,不過要保證列表的長度與DataFrame長度相同:

frame2.debt = np.arange(5)
frame2
#輸出
? ? year ? ?state ? pop debt
one 2000 ? ?Ohio ? ?1.5 0
two 2001 ? ?Ohio ? ?1.7 1
three ? 2002 ? ?Ohio ? ?3.6 2
four ? ?2001 ? ?Nevada ?2.4 3
five ? ?2002 ? ?Nevada ?2.9 4

可以使用一個Series,此時會根據(jù)索引進行精確匹配:

val = pd.Series([-1.2,-1.5,-1.7],index=['two','four','five'])
frame2['debt'] = val
frame2
#輸出
? ? year ? ?state ? pop debt
one 2000 ? ?Ohio ? ?1.5 NaN
two 2001 ? ?Ohio ? ?1.7 -1.2
three ? 2002 ? ?Ohio ? ?3.6 NaN
four ? ?2001 ? ?Nevada ?2.4 -1.5
five ? ?2002 ? ?Nevada ?2.9 -1.7

重新索引

使用reindex方法對DataFrame進行重新索引。對DataFrame進行重新索引,可以重新索引行,列或者兩個都修改,如果只傳入一個參數(shù),則會從新索引行:

frame = pd.DataFrame(np.arange(9).reshape((3,3)),index=[1,4,5],columns=['Ohio','Texas','California'])
frame2 = frame.reindex([1,2,4,5])
frame2
#輸出
? ? Ohio ? ?Texas ? California
1 ? 0.0 1.0 2.0
2 ? NaN NaN NaN
4 ? 3.0 4.0 5.0
5 ? 6.0 7.0 8.0

states = ['Texas','Utah','California']
frame.reindex(columns=states)
#輸出
? ? Texas ? Utah ? ?California
1 ? 1 ? NaN 2
4 ? 4 ? NaN 5
5 ? 7 ? NaN 8

填充數(shù)據(jù)只能按行填充,此時只能對行進行重新索引:

frame = pd.DataFrame(np.arange(9).reshape((3,3)),index = ['a','c','d'],columns = ['Ohio','Texas','California'])
frame.reindex(['a','b','c','d'],method = 'bfill')
#frame.reindex(['a','b','c','d'],method = 'bfill',columns=states) 報錯

丟棄指定軸上的值

可以使用drop方法丟棄指定軸上的值,不會對原DataFrame產(chǎn)生影響

frame = pd.DataFrame(np.arange(9).reshape((3,3)),index = ['a','c','d'],columns = ['Ohio','Texas','California'])
frame.drop('a')?
#輸出
Ohio ? ?Texas ? California
a ? 0 ? 1 ? 2
c ? 3 ? 4 ? 5
d ? 6 ? 7 ? 8

frame.drop(['Ohio'],axis=1)
#輸出
? ? Texas ? California
a ? 1 ? 2
c ? 4 ? 5
d ? 7 ? 8

算術(shù)運算

DataFrame在進行算術(shù)運算時會進行補齊,在不重疊的部分補足NA:

df1 = pd.DataFrame(np.arange(9).reshape((3,3)),columns=list('bcd'),index=['Ohio','Texas','Colorado'])
df2 = pd.DataFrame(np.arange(12).reshape((4,3)),columns = list('bde'),index=['Utah','Ohio','Texas','Oregon'])
df1 + df2
#輸出
? ? b ? c ? d ? e
Colorado ? ?NaN NaN NaN NaN
Ohio ? ?3.0 NaN 6.0 NaN
Oregon ?NaN NaN NaN NaN
Texas ? 9.0 NaN 12.0 ? ?NaN
Utah ? ?NaN NaN NaN NaN

可以使用fill_value方法填充NA數(shù)據(jù),不過兩個df中都為NA的數(shù)據(jù),該方法不會填充:

df1.add(df2,fill_value=0)
#輸出
? ? b ? c ? d ? e
Colorado ? ?6.0 7.0 8.0 NaN
Ohio ? ?3.0 1.0 6.0 5.0
Oregon ?9.0 NaN 10.0 ? ?11.0
Texas ? 9.0 4.0 12.0 ? ?8.0
Utah ? ?0.0 NaN 1.0 2.0

函數(shù)應(yīng)用和映射

numpy的元素級數(shù)組方法,也可以用于操作Pandas對象:

frame = pd.DataFrame(np.random.randn(3,3),columns=list('bcd'),index=['Ohio','Texas','Colorado'])
np.abs(frame)
#輸出
? ? b ? c ? d
Ohio ? ?0.367521 ? ?0.232387 ? ?0.649330
Texas ? 3.115632 ? ?1.415106 ? ?2.093794
Colorado ? ?0.714983 ? ?1.420871 ? ?0.557722

另一個常見的操作是,將函數(shù)應(yīng)用到由各列或行所形成的一維數(shù)組上。DataFrame的apply方法即可實現(xiàn)此功能。

f = lambda x:x.max() - x.min()
frame.apply(f)
#輸出
b ? ?3.830616
c ? ?2.835978
d ? ?2.743124
dtype: float64

frame.apply(f,axis=1)
#輸出
Ohio ? ? ? ?1.016851
Texas ? ? ? 4.530739
Colorado ? ?2.135855
dtype: float64

def f(x):
? ? return pd.Series([x.min(),x.max()],index=['min','max'])
frame.apply(f)
#輸出
? ? b ? c ? d
min -0.714983 ? -1.415106 ? -0.649330
max 3.115632 ? ?1.420871 ? ?2.093794

元素級的Python函數(shù)也是可以用的,使用applymap方法:

format = lambda x:'%.2f'%x
frame.applymap(format)
#輸出
b ? c ? d
Ohio ? ?0.37 ? ?-0.23 ? -0.65
Texas ? 3.12 ? ?-1.42 ? 2.09
Colorado ? ?-0.71 ? 1.42 ? ?-0.56

排序和排名

對于DataFrame,sort_index可以根據(jù)任意軸的索引進行排序,并指定升序降序

frame = pd.DataFrame(np.arange(8).reshape((2,4)),index=['three','one'],columns=['d','a','b','c'])
frame.sort_index()
#輸出
? ? d ? a ? b ? c
one 4 ? 5 ? 6 ? 7
three ? 0 ? 1 ? 2 ? 3

frame.sort_index(1,ascending=False)
#輸出
? ? d ? a ? b ? c
one 4 ? 5 ? 6 ? 7
three ? 0 ? 1 ? 2 ? 3

DataFrame也可以按照值進行排序:

#按照任意一列或多列進行排序
frame.sort_values(by=['a','b'])
#輸出
? ? d ? a ? b ? c
three ? 0 ? 1 ? 2 ? 3
one 4 ? 5 ? 6 ? 7

匯總和計算描述統(tǒng)計

DataFrame中的實現(xiàn)了sum、mean、max等方法,我們可以指定進行匯總統(tǒng)計的軸,同時,也可以使用describe函數(shù)查看基本所有的統(tǒng)計項:

df = pd.DataFrame([[1.4,np.nan],[7.1,-4.5],[np.nan,np.nan],[0.75,-1.3]],index=['a','b','c','d'],columns=['one','two'])
df.sum(axis=1)
#輸出
one ? ?9.25
two ? -5.80
dtype: float64

#Na會被自動排除,可以使用skipna選項來禁用該功能
df.mean(axis=1,skipna=False)
#輸出
a ? ? ?NaN
b ? ?1.300
c ? ? ?NaN
d ? -0.275
dtype: float64
#idxmax返回間接統(tǒng)計,是達到最大值的索引

df.idxmax()
#輸出
one ? ?b
two ? ?d
dtype: object

#describe返回的是DataFrame的匯總統(tǒng)計
#非數(shù)值型的與數(shù)值型的統(tǒng)計返回結(jié)果不同
df.describe()
#輸出
one two
count ? 3.000000 ? ?2.000000
mean ? ?3.083333 ? ?-2.900000
std 3.493685 ? ?2.262742
min 0.750000 ? ?-4.500000
25% 1.075000 ? ?-3.700000
50% 1.400000 ? ?-2.900000
75% 4.250000 ? ?-2.100000
max 7.100000 ? ?-1.300000

DataFrame也實現(xiàn)了corr和cov方法來計算一個DataFrame的相關(guān)系數(shù)矩陣和協(xié)方差矩陣,同時DataFrame也可以與Series求解相關(guān)系數(shù)。

frame1 = pd.DataFrame(np.random.randn(3,3),index=list('abc'),columns=list('abc'))
frame1.corr
#輸出
<bound method DataFrame.corr of ? ? ? ? ? a ? ? ? ? b ? ? ? ? c
a ?1.253773 ?0.429059 ?1.535575
b -0.113987 -2.837396 -0.894469
c -0.548208 ?0.834003 ?0.994863>

frame1.cov()
#輸出
a ? b ? c
a ? 0.884409 ? ?0.357304 ? ?0.579613
b ? 0.357304 ? ?4.052147 ? ?2.442527
c ? 0.579613 ? ?2.442527 ? ?1.627843

#corrwith用于計算每一列與Series的相關(guān)系數(shù)
frame1.corrwith(frame1['a'])
#輸出
a ? ?1.000000
b ? ?0.188742
c ? ?0.483065
dtype: float64

處理缺失數(shù)據(jù)

Pandas中缺失值相關(guān)的方法主要有以下三個:

  • isnull方法用于判斷數(shù)據(jù)是否為空數(shù)據(jù);
  • fillna方法用于填補缺失數(shù)據(jù);
  • dropna方法用于舍棄缺失數(shù)據(jù)。

上面兩個方法返回一個新的Series或者DataFrame,對原數(shù)據(jù)沒有影響,如果想在原數(shù)據(jù)上進行直接修改,使用inplace參數(shù):

data = pd.DataFrame([[1,6.5,3],[1,np.nan,np.nan],[np.nan,np.nan,np.nan],[np.nan,6.5,3]])
data.dropna()
#輸出
? ? 0 ? 1 ? 2
0 ? 1.0 6.5 3.0

DataFrame來說,dropna方法如果發(fā)現(xiàn)缺失值,就會進行整行刪除,不過可以指定刪除的方式,how=all,是當整行全是na的時候才進行刪除,同時還可以指定刪除的軸。

data.dropna(how='all',axis=1,inplace=True)
data
#輸出
0 ? 1 ? 2
0 ? 1.0 6.5 3.0
1 ? 1.0 NaN NaN
2 ? NaN NaN NaN
3 ? NaN 6.5 3.0
DataFrame填充缺失值可以統(tǒng)一填充,也可以按列填充,或者指定一種填充方式:

data.fillna({1:2,2:3})
#輸出
0 ? 1 ? 2
0 ? 1.0 6.5 3.0
1 ? 1.0 2.0 3.0
2 ? NaN 2.0 3.0
3 ? NaN 6.5 3.0

data.fillna(method='ffill')
#輸出
0 ? 1 ? 2
0 ? 1.0 6.5 3.0
1 ? 1.0 6.5 3.0
2 ? 1.0 6.5 3.0
3 ? 1.0 6.5 3.0

到此這篇關(guān)于Pandas-DataFrame知識點匯總的文章就介紹到這了,更多相關(guān)Pandas-DataFrame內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Keras 使用 Lambda層詳解

    Keras 使用 Lambda層詳解

    這篇文章主要介紹了Keras 使用 Lambda層詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Pycharm學習教程(1) 定制外觀

    Pycharm學習教程(1) 定制外觀

    這篇文章主要介紹了最全的Pycharm學習教程第一篇如何定制外觀,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • python表格存取的方法

    python表格存取的方法

    這篇文章主要為大家詳細介紹了python表格存取的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • python2.7刪除文件夾和刪除文件代碼實例

    python2.7刪除文件夾和刪除文件代碼實例

    python刪除文件夾t和刪除文件代碼實例,大家參考使用吧,運行環(huán)境是python2.7
    2013-12-12
  • python3.7環(huán)境下安裝Anaconda的教程圖解

    python3.7環(huán)境下安裝Anaconda的教程圖解

    這篇文章主要介紹了python3.7環(huán)境下安裝Anaconda的教程,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • python第三方庫visdom的使用入門教程

    python第三方庫visdom的使用入門教程

    Visdom:一個靈活的可視化工具,可用來對于 實時,富數(shù)據(jù)的 創(chuàng)建,組織和共享,本文主要介紹了python第三方庫visdom的使用入門教程,分享給大家,感興趣的可以了解一下
    2021-05-05
  • Python中最常用的操作列表的幾種方法歸納

    Python中最常用的操作列表的幾種方法歸納

    這篇文章主要介紹了Python中最常用的操作列表的幾種方法歸納,列表的方法是Python學習中最基本的知識,需要的朋友可以參考下
    2015-04-04
  • python 遺傳算法求函數(shù)極值的實現(xiàn)代碼

    python 遺傳算法求函數(shù)極值的實現(xiàn)代碼

    今天小編就為大家分享一篇python 遺傳算法求函數(shù)極值的實現(xiàn)代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • python config文件的讀寫操作示例

    python config文件的讀寫操作示例

    這篇文章主要介紹了python config文件的讀寫操作,結(jié)合簡單示例形式分析了Python針對config文件的設(shè)置、讀取、寫入相關(guān)操作技巧,需要的朋友可以參考下
    2019-09-09
  • 用Python配平化學方程式的方法

    用Python配平化學方程式的方法

    在本篇文章中小編給大家整理的是關(guān)于用Python配平化學方程式的方法以及相關(guān)注意知識點,需要的朋友們參考學習下。
    2019-07-07

最新評論