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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python数据处理常用函数_Python大数据处理模块Pandas

發(fā)布時(shí)間:2024/7/23 python 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python数据处理常用函数_Python大数据处理模块Pandas 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Pandas使用一個(gè)二維的數(shù)據(jù)結(jié)構(gòu)DataFrame來(lái)表示表格式的數(shù)據(jù),相比較于Numpy,Pandas可以存儲(chǔ)混合的數(shù)據(jù)結(jié)構(gòu),同時(shí)使用NaN來(lái)表示缺失的數(shù)據(jù),而不用像Numpy一樣要手工處理缺失的數(shù)據(jù),并且Pandas使用軸標(biāo)簽來(lái)表示行和列

1、文件讀取

首先將用到的pandas和numpy加載進(jìn)來(lái)

import pandas as pd

import numpy as np

讀取數(shù)據(jù):

#csv和xlsx分別用read_csv和read_xlsx,下面以csv為例

df=pd.read_csv('f:\1024.csv')

2、查看數(shù)據(jù)df.head()#默認(rèn)出5行,括號(hào)里可以填其他數(shù)據(jù)3、查看數(shù)據(jù)類型df.dtypes4、利用現(xiàn)有數(shù)據(jù)生成一列新數(shù)據(jù)比如:max_time和min_time是現(xiàn)有的兩列,現(xiàn)在業(yè)務(wù)需要生成一列g(shù)s,gs=max_time-min_timedf.['gs']=df.['max_time']-['min_time']#查看是否成功df.head()5、查看基本統(tǒng)計(jì)量df.describe(include='all')# all代表需要將所有列都列出

通常來(lái)說(shuō),數(shù)據(jù)是CSV格式,就算不是,至少也可以轉(zhuǎn)換成CSV格式。在Python中,我們的操作如下:

import pandas as pd

# Reading data locally

df = pd.read_csv('/Users/al-ahmadgaidasaad/Documents/d.csv')

# Reading data from web

df = pd.read_csv(data_url)

為了讀取本地CSV文件,我們需要pandas這個(gè)數(shù)據(jù)分析庫(kù)中的相應(yīng)模塊。

其中的read_csv函數(shù)能夠讀取本地和web數(shù)據(jù)。

# Head of the data

print df.head()

# OUTPUT

Abra Apayao Benguet Ifugao Kalinga

0 1243 2934 148 3300 10553

1 4158 9235 4287 8063 35257

2 1787 1922 1955 1074 4544

3 17152 14501 3536 19607 31687

4 1266 2385 2530 3315 8520

# Tail of the data

print df.tail()

# OUTPUT

Abra Apayao Benguet Ifugao Kalinga

74 2505 20878 3519 19737 16513

75 60303 40065 7062 19422 61808

76 6311 6756 3561 15910 23349

77 13345 38902 2583 11096 68663

78 2623 18264 3745 16787 16900

上述操作等價(jià)于通過(guò)print(head(df))來(lái)打印數(shù)據(jù)的前6行,以及通過(guò)print(tail(df))來(lái)打印數(shù)據(jù)的后6行。

當(dāng)然Python中,默認(rèn)打印是5行,而R則是6行。因此R的代碼head(df, n = 10),

在Python中就是df.head(n = 10),打印數(shù)據(jù)尾部也是同樣道理。

在Python中,我們則使用columns和index屬性來(lái)提取,如下:

# Extracting column names

print df.columns

# OUTPUT

Index([u'Abra', u'Apayao', u'Benguet', u'Ifugao', u'Kalinga'], dtype='object')

# Extracting row names or the index

print df.index

# OUTPUT

Int64Index([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30], dtype='int64')

數(shù)據(jù)轉(zhuǎn)置使用T方法,

# Transpose data

print df.T

# OUTPUT

0 1 2 3 4 5 6 7 8 9

Abra 1243 4158 1787 17152 1266 5576 927 21540 1039 5424

Apayao 2934 9235 1922 14501 2385 7452 1099 17038 1382 10588

Benguet 148 4287 1955 3536 2530 771 2796 2463 2592 1064

Ifugao 3300 8063 1074 19607 3315 13134 5134 14226 6842 13828

Kalinga 10553 35257 4544 31687 8520 28252 3106 36238 4973 40140

... 69 70 71 72 73 74 75 76 77

Abra ... 12763 2470 59094 6209 13316 2505 60303 6311 13345

Apayao ... 37625 19532 35126 6335 38613 20878 40065 6756 38902

Benguet ... 2354 4045 5987 3530 2585 3519 7062 3561 2583

Ifugao ... 9838 17125 18940 15560 7746 19737 19422 15910 11096

Kalinga ... 65782 15279 52437 24385 66148 16513 61808 23349 68663

78

Abra 2623

Apayao 18264

Benguet 3745

Ifugao 16787

Kalinga 16900

其他變換,例如排序就是用sort屬性。現(xiàn)在我們提取特定的某列數(shù)據(jù)。

Python中,可以使用iloc或者ix屬性。但是我更喜歡用ix,因?yàn)樗€(wěn)定一些。假設(shè)我們需數(shù)據(jù)第一列的前5行,我們有:

print df.ix[:, 0].head()

# OUTPUT

0 1243

1 4158

2 1787

3 17152

4 1266

Name: Abra, dtype: int64

順便提一下,Python的索引是從0開(kāi)始而非1。為了取出從11到20行的前3列數(shù)據(jù),我們有:

print df.ix[10:20, 0:3]

# OUTPUT

Abra Apayao Benguet

10 981 1311 2560

11 27366 15093 3039

12 1100 1701 2382

13 7212 11001 1088

14 1048 1427 2847

15 25679 15661 2942

16 1055 2191 2119

17 5437 6461 734

18 1029 1183 2302

19 23710 12222 2598

20 1091 2343 2654

上述命令相當(dāng)于df.ix[10:20, ['Abra', 'Apayao', 'Benguet']]。

為了舍棄數(shù)據(jù)中的列,這里是列1(Apayao)和列2(Benguet),我們使用drop屬性,如下:

print df.drop(df.columns[[1, 2]], axis = 1).head()

# OUTPUT

Abra Ifugao Kalinga

0 1243 3300 10553

1 4158 8063 35257

2 1787 1074 4544

3 17152 19607 31687

4 1266 3315 8520

axis 參數(shù)告訴函數(shù)到底舍棄列還是行。如果axis等于0,那么就舍棄行。

統(tǒng)計(jì)描述

下一步就是通過(guò)describe屬性,對(duì)數(shù)據(jù)的統(tǒng)計(jì)特性進(jìn)行描述:

print df.describe()

# OUTPUT

Abra Apayao Benguet Ifugao Kalinga

count 79.000000 79.000000 79.000000 79.000000 79.000000

mean 12874.379747 16860.645570 3237.392405 12414.620253 30446.417722

std 16746.466945 15448.153794 1588.536429 5034.282019 22245.707692

min 927.000000 401.000000 148.000000 1074.000000 2346.000000

25% 1524.000000 3435.500000 2328.000000 8205.000000 8601.500000

50% 5790.000000 10588.000000 3202.000000 13044.000000 24494.000000

75% 13330.500000 33289.000000 3918.500000 16099.500000 52510.500000

max 60303.000000 54625.000000 8813.000000 21031.000000 68663.000000

Python有一個(gè)很好的統(tǒng)計(jì)推斷包。那就是scipy里面的stats。ttest_1samp實(shí)現(xiàn)了單樣本t檢驗(yàn)。因此,如果我們想檢驗(yàn)數(shù)據(jù)Abra列的稻谷產(chǎn)量均值,通過(guò)零假設(shè),這里我們假定總體稻谷產(chǎn)量均值為15000,我們有:

from scipy import stats as ss

# Perform one sample t-test using 1500 as the true mean

print ss.ttest_1samp(a = df.ix[:, 'Abra'], popmean = 15000)

# OUTPUT

(-1.1281738488299586, 0.26270472069109496)

返回下述值組成的元祖:

t : 浮點(diǎn)或數(shù)組類型

t統(tǒng)計(jì)量

prob : 浮點(diǎn)或數(shù)組類型

two-tailed p-value 雙側(cè)概率值

通過(guò)上面的輸出,看到p值是0.267遠(yuǎn)大于α等于0.05,因此沒(méi)有充分的證據(jù)說(shuō)平均稻谷產(chǎn)量不是150000。將這個(gè)檢驗(yàn)應(yīng)用到所有的變量,同樣假設(shè)均值為15000,我們有:

print ss.ttest_1samp(a = df, popmean = 15000)

# OUTPUT

(array([ -1.12817385, 1.07053437, -65.81425599, -4.564575 , 6.17156198]),

array([ 2.62704721e-01, 2.87680340e-01, 4.15643528e-70,

1.83764399e-05, 2.82461897e-08]))

第一個(gè)數(shù)組是t統(tǒng)計(jì)量,第二個(gè)數(shù)組則是相應(yīng)的p值。

可視化

Python中有許多可視化模塊,最流行的當(dāng)屬matpalotlib庫(kù)。稍加提及,我們也可選擇bokeh和seaborn模塊。之前的博文中,我已經(jīng)說(shuō)明了matplotlib庫(kù)中的盒須圖模塊功能。

# Import the module for plotting

import matplotlib.pyplot as plt

plt.show(df.plot(kind = 'box'))

現(xiàn)在,我們可以用pandas模塊中集成R的ggplot主題來(lái)美化圖表。要使用ggplot,我們只需要在上述代碼中多加一行,

import matplotlib.pyplot as plt

pd.options.display.mpl_style = 'default' # Sets the plotting display theme to ggplot2

df.plot(kind = 'box')

# Import the seaborn library

import seaborn as sns

# Do the boxplot

plt.show(sns.boxplot(df, widths = 0.5, color = "pastel"))

import numpy as np

import scipy.stats as ss

def case(n = 10, mu = 3, sigma = np.sqrt(5), p = 0.025, rep = 100):

m = np.zeros((rep, 4))

for i in range(rep):

norm = np.random.normal(loc = mu, scale = sigma, size = n)

xbar = np.mean(norm)

low = xbar - ss.norm.ppf(q = 1 - p) * (sigma / np.sqrt(n))

up = xbar + ss.norm.ppf(q = 1 - p) * (sigma / np.sqrt(n))

if (mu > low) & (mu < up):

rem = 1

else:

rem = 0

m[i, :] = [xbar, low, up, rem]

inside = np.sum(m[:, 3])

per = inside / rep

desc = "There are " + str(inside) + " confidence intervals that contain "

"the true mean (" + str(mu) + "), that is " + str(per) + " percent of the total CIs"

return {"Matrix": m, "Decision": desc}

import numpy as np

import scipy.stats as ss

def case2(n = 10, mu = 3, sigma = np.sqrt(5), p = 0.025, rep = 100):

scaled_crit = ss.norm.ppf(q = 1 - p) * (sigma / np.sqrt(n))

norm = np.random.normal(loc = mu, scale = sigma, size = (rep, n))

xbar = norm.mean(1)

low = xbar - scaled_crit

up = xbar + scaled_crit

rem = (mu > low) & (mu < up)

m = np.c_[xbar, low, up, rem]

inside = np.sum(m[:, 3])

per = inside / rep

desc = "There are " + str(inside) + " confidence intervals that contain "

"the true mean (" + str(mu) + "), that is " + str(per) + " percent of the total CIs"

return {"Matrix": m, "Decision": desc}

讀取數(shù)據(jù)

Pandas使用函數(shù)read_csv()來(lái)讀取csv文件

import pandas

food_info = ('food_info.csv')

print(type(food_info))# 輸出: 可見(jiàn)讀取后變成一個(gè)DataFrame變量

該文件的內(nèi)容如下:

使用函數(shù)head( m )來(lái)讀取前m條數(shù)據(jù),如果沒(méi)有參數(shù)m,默認(rèn)讀取前五條數(shù)據(jù)first_rows = food_info.head()

first_rows = food_info.head(3)

由于DataFrame包含了很多的行和列,

Pandas使用省略號(hào)(...)來(lái)代替顯示全部的行和列,可以使用colums屬性來(lái)顯示全部的列名

print(food_info.columns)

# 輸出:輸出全部的列名,而不是用省略號(hào)代替Index(['NDB_No', 'Shrt_Desc', 'Water_(g)', 'Energ_Kcal', 'Protein_(g)', 'Lipid_Tot_(g)', 'Ash_(g)', 'Carbohydrt_(g)', 'Fiber_TD_(g)', 'Sugar_Tot_(g)', 'Calcium_(mg)', 'Iron_(mg)', 'Magnesium_(mg)', 'Phosphorus_(mg)', 'Potassium_(mg)', 'Sodium_(mg)', 'Zinc_(mg)', 'Copper_(mg)', 'Manganese_(mg)', 'Selenium_(mcg)', 'Vit_C_(mg)', 'Thiamin_(mg)', 'Riboflavin_(mg)', 'Niacin_(mg)', 'Vit_B6_(mg)', 'Vit_B12_(mcg)', 'Vit_A_IU', 'Vit_A_RAE', 'Vit_E_(mg)', 'Vit_D_mcg', 'Vit_D_IU', 'Vit_K_(mcg)', 'FA_Sat_(g)', 'FA_Mono_(g)', 'FA_Poly_(g)', 'Cholestrl_(mg)'], dtype='object')

可以使用tolist()函數(shù)轉(zhuǎn)化為listfood_info.columns.tolist()

與Numpy一樣,用shape屬性來(lái)顯示數(shù)據(jù)的格式

dimensions = (dimensions)

print(dimensions)輸出:(8618,36) ,

其中dimensions[0]為8618,dimensions[1]為36

與Numpy一樣,用dtype屬性來(lái)顯示數(shù)據(jù)類型,Pandas主要有以下幾種dtype:object -- 代表了字符串類型

int -- 代表了整型

float -- 代表了浮點(diǎn)數(shù)類型

datetime -- 代表了時(shí)間類型

bool -- 代表了布爾類型

當(dāng)讀取了一個(gè)文件之后,Pandas會(huì)通過(guò)分析值來(lái)推測(cè)每一列的數(shù)據(jù)類型

print()

輸出:每一列對(duì)應(yīng)的數(shù)據(jù)類型

NDB_No int64

Shrt_Desc object

Water_(g) float64

Energ_Kcal int64

Protein_(g) float64

...

索引

讀取了文件后,Pandas會(huì)把文件的一行作為列的索引標(biāo)簽,使用行數(shù)字作為行的索引標(biāo)簽

注意,行標(biāo)簽是從數(shù)字0開(kāi)始的

Pandas使用Series數(shù)據(jù)結(jié)構(gòu)來(lái)表示一行或一列的數(shù)據(jù),類似于Numpy使用向量來(lái)表示數(shù)據(jù)。Numpy只能使用數(shù)字來(lái)索引,而Series可以使用非數(shù)字來(lái)索引數(shù)據(jù),當(dāng)你選擇返回一行數(shù)據(jù)的時(shí)候,Series并不僅僅返回該行的數(shù)據(jù),同時(shí)還有每一列的標(biāo)簽的名字。

譬如要返回文件的第一行數(shù)據(jù),Numpy就會(huì)返回一個(gè)列表(但你可能不知道每一個(gè)數(shù)字究竟代表了什么)

而Pandas則會(huì)同時(shí)把每一列的標(biāo)簽名返回(此時(shí)就很清楚數(shù)據(jù)的意思了)

選擇數(shù)據(jù)

Pandas使用loc[]方法來(lái)選擇行的數(shù)據(jù)

# 選擇單行數(shù)據(jù):

food_info.loc[0] # 選擇行標(biāo)號(hào)為0的數(shù)據(jù),即第一行數(shù)據(jù)

food_info.loc[6] # 選擇行標(biāo)號(hào)為6的數(shù)據(jù),即第七行數(shù)據(jù)

# 選擇多行數(shù)據(jù):

# 使用了切片,注意:由于這里使用loc[]函數(shù),所以返回的是行標(biāo)號(hào)為3,4,5,6的數(shù)據(jù),與python的切片不同的是這里會(huì)返回最后的標(biāo)號(hào)代表的數(shù)據(jù),但也可以使用python的切片方法:

# 返回行標(biāo)號(hào)為2,5,10三行數(shù)據(jù)

練習(xí):返回文件的最后五行

方法一:

length = food_info.shape[0]

last_rows = food_info.loc[length-5:length-1]

方法二:

num_rows = food_info.shape[0]

last_rows = food_info[num_rows-5:num_rows]

ndb_col = food_info["NDB_No"] # 返回列名稱為NDB_No的那一列的數(shù)據(jù)

zinc_copper = food_info[["Zinc_(mg)", "Copper_(mg)"]] # 返回兩列數(shù)據(jù)

簡(jiǎn)單運(yùn)算

現(xiàn)在要按照如下公式計(jì)算所有食物的健康程度,并按照降序的方式排列結(jié)果:

Score=2×(Protein_(g))0.75×(Lipid_Tot_(g))

對(duì)DataFrame中的某一列數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算,其實(shí)是對(duì)該列中的所有元素進(jìn)行逐一的運(yùn)算,譬如:

water_energy = food_info["Water_(g)"] * food_info["Energ_Kcal"]

原理:

由于每一列的數(shù)據(jù)跨度太大,有的數(shù)據(jù)是從0到100000,而有的數(shù)據(jù)是從0到10,所以為了盡量減少數(shù)據(jù)尺度對(duì)運(yùn)算結(jié)果的影響,采取最簡(jiǎn)單的方法來(lái)規(guī)范化數(shù)據(jù),那就是將每個(gè)數(shù)值都除以該列的最大值,從而使所有數(shù)據(jù)都處于0和1之間。其中max()函數(shù)用來(lái)獲取該列的最大值.

food_info['Normalized_Protein'] = food_info['Protein_(g)'] / food_info['Protein_(g)'].max()

food_info['Normalized_Fat'] = food_info['Lipid_Tot_(g)'] / food_info['Lipid_Tot_(g)'].max()

food_info['Norm_Nutr_Index'] = food_info["Normalized_Protein"] * 2 - food_info["Normalized_Fat"] * 0.75

注意:上面的兩個(gè)語(yǔ)句已經(jīng)在原來(lái)的DataFrame中添加了三列,列名分別為Normalized_Protein和Normalized_Fat,Norm_Nutr_Index。只需要使用中括號(hào)和賦值符就能添加新列,類似于字典

food_info.sort("Sodium_(mg)") # 函數(shù)參數(shù)為列名,默認(rèn)是按照升序排序,同時(shí)返回一個(gè)新的

DataFramefood_info.("Norm_Nutr_Index", inplace=True, ascending=False )

# ,而不是返回一個(gè)新的對(duì)象;ascending參數(shù)用來(lái)控制是否升序排序

import pandas as pd

read_csv()

讀寫csv數(shù)據(jù)

df =pd.read_csv(path): 讀入csv文件,形成一個(gè)數(shù)據(jù)框(data.frame)

df = pd.read_csv(path, header=None)不要把第一行作為header

to_csv()

* 注意,默認(rèn)會(huì)將第一行作為header,并且默認(rèn)會(huì)添加index,所以不需要的話需要手動(dòng)禁用 *

df.to_csv(path, header=False, index=False)

數(shù)據(jù)框操作

df.head(1) 讀取頭幾條數(shù)據(jù)

df.tail(1) 讀取后幾條數(shù)據(jù)

df[‘date’] 獲取數(shù)據(jù)框的date列

df.head(1)[‘date’] 獲取第一行的date列

df.head(1)[‘date’][0] 獲取第一行的date列的元素值

sum(df[‘a(chǎn)bility’]) 計(jì)算整個(gè)列的和

df[df[‘date’] == ‘20161111’] 獲取符合這個(gè)條件的行

df[df[‘date’] == ‘20161111’].index[0] 獲取符合這個(gè)條件的行的行索引的值

df.iloc[1] 獲取第二行

df.iloc[1][‘test2’] 獲取第二行的test2值

10 mins to pandas

df.index 獲取行的索引

df.index[0] 獲取第一個(gè)行索引

df.index[-1] 獲取最后一個(gè)行索引,只是獲取索引值

df.columns 獲取列標(biāo)簽

df[0:2] 獲取第1到第2行,從0開(kāi)始,不包含末端

df.loc[1] 獲取第二行

df.loc[:,’test1’] 獲取test1的那一列,這個(gè)冒號(hào)的意思是所有行,逗號(hào)表示行與列的區(qū)分

df.loc[:,[‘test1’,’test2’]] 獲取test1列和test2列的數(shù)據(jù)

df.loc[1,[‘test1’,’test2’]] 獲取第二行的test1和test2列的數(shù)據(jù)

df.at[1,’test1’] 表示取第二行,test1列的數(shù)據(jù),和上面的方法類似

df.iloc[0] 獲取第一行

df.iloc[0:2,0:2] 獲取前兩行前兩列的數(shù)據(jù)

df.iloc[[1,2,4],[0,2]] 獲取第1,2,4行中的0,2列的數(shù)據(jù)

(df[2] > 1).any() 對(duì)于Series應(yīng)用any()方法來(lái)判斷是否有符合條件的

一、創(chuàng)建對(duì)象

1、可以通過(guò)傳遞一個(gè)list對(duì)象來(lái)創(chuàng)建一個(gè)Series,pandas會(huì)默認(rèn)創(chuàng)建整型索引:

2、通過(guò)傳遞一個(gè)numpy array,時(shí)間索引以及列標(biāo)簽來(lái)創(chuàng)建一個(gè)DataFrame:

3、通過(guò)傳遞一個(gè)能夠被轉(zhuǎn)換成類似序列結(jié)構(gòu)的字典對(duì)象來(lái)創(chuàng)建一個(gè)DataFrame:

4、查看不同列的數(shù)據(jù)類型:

5、如果你使用的是IPython,使用Tab自動(dòng)補(bǔ)全功能會(huì)自動(dòng)識(shí)別所有的屬性以及自定義的列,下圖中是所有能夠被自動(dòng)識(shí)別的屬性的一個(gè)子集:

二、查看數(shù)據(jù)

1、查看frame中頭部和尾部的行:

2、顯示索引、列和底層的numpy數(shù)據(jù):

3、describe()函數(shù)對(duì)于數(shù)據(jù)的快速統(tǒng)計(jì)匯總:

4、對(duì)數(shù)據(jù)的轉(zhuǎn)置:

5、按軸進(jìn)行排序

6、按值進(jìn)行排序

三、選擇

雖然標(biāo)準(zhǔn)的Python/Numpy的選擇和設(shè)置表達(dá)式都能夠直接派上用場(chǎng),但是作為工程使用的代碼,我們推薦使用經(jīng)過(guò)優(yōu)化的pandas數(shù)據(jù)訪問(wèn)方式: .at,.iat,.loc,.iloc和.ix詳情請(qǐng)參閱Indexing and Selecing Data和MultiIndex / Advanced Indexing。

l獲取

1、選擇一個(gè)單獨(dú)的列,這將會(huì)返回一個(gè)Series,等同于df.A:

2、通過(guò)[]進(jìn)行選擇,這將會(huì)對(duì)行進(jìn)行切片

l通過(guò)標(biāo)簽選擇

1、使用標(biāo)簽來(lái)獲取一個(gè)交叉的區(qū)域

2、通過(guò)標(biāo)簽來(lái)在多個(gè)軸上進(jìn)行選擇

3、標(biāo)簽切片

4、對(duì)于返回的對(duì)象進(jìn)行維度縮減

5、獲取一個(gè)標(biāo)量

6、快速訪問(wèn)一個(gè)標(biāo)量(與上一個(gè)方法等價(jià))

l通過(guò)位置選擇

1、通過(guò)傳遞數(shù)值進(jìn)行位置選擇(選擇的是行)

2、通過(guò)數(shù)值進(jìn)行切片,與numpy/python中的情況類似

3、通過(guò)指定一個(gè)位置的列表,與numpy/python中的情況類似

4、對(duì)行進(jìn)行切片

5、對(duì)列進(jìn)行切片

6、獲取特定的值

l布爾索引

1、使用一個(gè)單獨(dú)列的值來(lái)選擇數(shù)據(jù):

2、使用where操作來(lái)選擇數(shù)據(jù):

3、使用isin()方法來(lái)過(guò)濾:

l設(shè)置

1、設(shè)置一個(gè)新的列:

2、通過(guò)標(biāo)簽設(shè)置新的值:

3、通過(guò)位置設(shè)置新的值:

4、通過(guò)一個(gè)numpy數(shù)組設(shè)置一組新值:

上述操作結(jié)果如下:

5、通過(guò)where操作來(lái)設(shè)置新的值:

四、缺失值處理

在pandas中,使用np.nan來(lái)代替缺失值,這些值將默認(rèn)不會(huì)包含在計(jì)算中,詳情請(qǐng)參閱:Missing Data Section。

1、reindex()方法可以對(duì)指定軸上的索引進(jìn)行改變/增加/刪除操作,這將返回原始數(shù)據(jù)的一個(gè)拷貝:、

2、去掉包含缺失值的行:

3、對(duì)缺失值進(jìn)行填充:

4、對(duì)數(shù)據(jù)進(jìn)行布爾填充:

五、相關(guān)操作統(tǒng)計(jì)(相關(guān)操作通常情況下不包括缺失值)

1、執(zhí)行描述性統(tǒng)計(jì):

2、在其他軸上進(jìn)行相同的操作:

3、對(duì)于擁有不同維度,需要對(duì)齊的對(duì)象進(jìn)行操作。Pandas會(huì)自動(dòng)的沿著指定的維度進(jìn)行廣播:

Apply

1、對(duì)數(shù)據(jù)應(yīng)用函數(shù):

直方圖

字符串方法

Series對(duì)象在其str屬性中配備了一組字符串處理方法,可以很容易的應(yīng)用到數(shù)組中的每個(gè)元素,如下段代碼所示。更多詳情請(qǐng)參考:Vectorized String Methods.

六、合并

Pandas提供了大量的方法能夠輕松的對(duì)Series,DataFrame和Panel對(duì)象進(jìn)行各種符合各種邏輯關(guān)系的合并操作。具體請(qǐng)參閱:Merging sectionConcat

Join類似于SQL類型的合并,具體請(qǐng)參閱:Database style joining

Append將一行連接到一個(gè)DataFrame上,具體請(qǐng)參閱Appending:

七、分組

對(duì)于”group by”操作,我們通常是指以下一個(gè)或多個(gè)操作步驟:(Splitting)按照一些規(guī)則將數(shù)據(jù)分為不同的組;

(Applying)對(duì)于每組數(shù)據(jù)分別執(zhí)行一個(gè)函數(shù);

(Combining)將結(jié)果組合到一個(gè)數(shù)據(jù)結(jié)構(gòu)中;

1、分組并對(duì)每個(gè)分組執(zhí)行sum函數(shù):

2、通過(guò)多個(gè)列進(jìn)行分組形成一個(gè)層次索引,然后執(zhí)行函數(shù):

八、ReshapingStack

數(shù)據(jù)透視表,詳情請(qǐng)參閱:Pivot Tables.

可以從這個(gè)數(shù)據(jù)中輕松的生成數(shù)據(jù)透視表:

九、時(shí)間序列

Pandas在對(duì)頻率轉(zhuǎn)換進(jìn)行重新采樣時(shí)擁有簡(jiǎn)單、強(qiáng)大且高效的功能(如將按秒采樣的數(shù)據(jù)轉(zhuǎn)換為按5分鐘為單位進(jìn)行采樣的數(shù)據(jù))。這種操作在金融領(lǐng)域非常常見(jiàn)。具體參考:Time Series section。

1、時(shí)區(qū)表示:

2、時(shí)區(qū)轉(zhuǎn)換:

3、時(shí)間跨度轉(zhuǎn)換:

4、時(shí)期和時(shí)間戳之間的轉(zhuǎn)換使得可以使用一些方便的算術(shù)函數(shù)。

十、Categorical

從0.15版本開(kāi)始,pandas可以在DataFrame中支持Categorical類型的數(shù)據(jù),詳細(xì) 介紹參看:categorical introduction和API documentation。

1、將原始的grade轉(zhuǎn)換為Categorical數(shù)據(jù)類型:

2、將Categorical類型數(shù)據(jù)重命名為更有意義的名稱:

3、對(duì)類別進(jìn)行重新排序,增加缺失的類別:

4、排序是按照Categorical的順序進(jìn)行的而不是按照字典順序進(jìn)行:

5、對(duì)Categorical列進(jìn)行排序時(shí)存在空的類別:

十一、畫圖

具體文檔參看:Plottingdocs

對(duì)于DataFrame來(lái)說(shuō),plot是一種將所有列及其標(biāo)簽進(jìn)行繪制的簡(jiǎn)便方法:

十二、導(dǎo)入和保存數(shù)據(jù)

1、寫入csv文件:

2、從csv文件中讀取:

1、寫入HDF5存儲(chǔ):

2、從HDF5存儲(chǔ)中讀取:

Excel,參考:MS Excel

1、寫入excel文件:

2、從excel文件中讀取:

總結(jié)

以上是生活随笔為你收集整理的python数据处理常用函数_Python大数据处理模块Pandas的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。