python对列表中的数值进行统计运算_利用Python进行数据分析-07-汇总和计算描述统计...

1、sum函数

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

Out[6]:

one two

a1.40NaN

b7.10 -4.5c NaN NaN

d0.75 -1.3df.sum()

Out[7]:

one9.25two-5.80dtype: float64

df.sum(axis=1) #NA值会自动排除,除非整个切片添加skipna禁用该功能

Out[8]:

a1.40b2.60c0.00d-0.55dtype: float64

df.mean(axis=1,skipna = False) #skipna 禁用na

Out[10]:

a NaN

b1.300c NaN

d-0.275dtype: float64

df.idxmax() #idxmax和idxmin返回的是间接统计(比如达到最小值和最大值的索引)

Out[13]:

one b

two d

dtype: object

df.cumsum()#案列累计

Out[14]:

one two

a1.40NaN

b8.50 -4.5c NaN NaN

d9.25 -5.8

一次性产生多个汇总

df.describe()

Out[15]:

one two

count3.000000 2.000000mean3.083333 -2.900000std3.493685 2.262742min0.750000 -4.500000

25% 1.075000 -3.700000

50% 1.400000 -2.900000

75% 4.250000 -2.100000max7.100000 -1.300000

对于非数值数据,describe会产生另外一种汇总统计:

obj = pd.Series(['a','a','b','c']*4)

obj.describe()

Out[17]:

count16unique3top a

freq8dtype: object

771497-20151105081825008-1321742070.png

771497-20151105081827352-705984635.png

2、Series的corr用于计算两个Series中重叠的、非NA的按索引对齐的相关系数,类似COV用于计算协方差

DataFrame的corr和cov将以DataFrame的形式返回完整的相关系数或协方差矩阵

利用DataFrame的corrwith方法,你可以计算其列或行跟另一个Series或DataFrame之间的相关系数。传入一个Series将会返回另一个Series(针对各列进行计算)

3、Series

value_count计算频数 obj.unique.sort()排序加唯一值

value_count适用于任何数组和序列

isin 计算一个Series各值是否包含于传入的值序列中的 布尔型数组

4、处理缺失数据

1、Series滤除缺失数据:dropna方法

DataFrame滤除用dropna方法会滤除含有NA的行和列:

from numpy importnan as NA

data = pd.DataFrame([[1.,6.5,3],[1,NA,NA],[NA,NA,NA],[NA,6.5,3.]])

cleaned =data.dropna()

data

Out[64]:

0 1 20 1 6.5 3

1 1NaN NaN

2NaN NaN NaN

3 NaN 6.5 3cleaned

Out[65]:

0 1 20 1 6.5 3

传入how =‘all’将只会丢弃全为NA的那些行

data.dropna(how = 'all')

Out[66]:

0 1 20 1 6.5 3

1 1NaN NaN

3 NaN 6.5 3

thresh=3,会在一行中至少有 3 个非 NA 值时将其保留。

df = pd.DataFrame(np.random.randn(7,3))

df

Out[70]:

0 1 20 -0.182777 0.122331 1.177341

1 -0.113750 0.565018 0.460551

2 1.569241 -0.244783 -0.584233

3 1.230427 -0.749321 -0.408792

4 1.342502 1.474066 -1.078444

5 0.730472 -0.835126 0.845470

6 -0.455549 -1.051597 0.875379df.ix[:4,1] = NA;df.ix[:2,2] =NA

df

Out[72]:

0 1 20 -0.182777NaN NaN

1 -0.113750NaN NaN

2 1.569241NaN NaN

3 1.230427 NaN -0.408792

4 1.342502 NaN -1.078444

5 0.730472 -0.835126 0.845470

6 -0.455549 -1.051597 0.875379df.dropna(thresh =3)

Out[73]:

0 1 2

5 0.730472 -0.835126 0.845470

6 -0.455549 -1.051597 0.875379

填充缺失数据:

常数调用fillna会将缺失值替换为那个常数值:

df.fillna(0)

Out[75]:

0 1 20 -0.182777 0.000000 0.000000

1 -0.113750 0.000000 0.000000

2 1.569241 0.000000 0.000000

3 1.230427 0.000000 -0.408792

4 1.342502 0.000000 -1.078444

5 0.730472 -0.835126 0.845470

6 -0.455549 -1.051597 0.875379df.fillna({1:1.5555,2:111111}) #1:1.5555代表在第一列找到NA值填充为1.5555

Out[76]:

0 1 20 -0.182777 1.555500 111111.000000

1 -0.113750 1.555500 111111.000000

2 1.569241 1.555500 111111.000000

3 1.230427 1.555500 -0.408792

4 1.342502 1.555500 -1.078444

5 0.730472 -0.835126 0.845470

6 -0.455549 -1.051597 0.875379

fillna默认会返回新的对象,同时也可以在旧的对象上进行修改:

_ = df.fillna(0,inplace =True)

df

Out[79]:

0 1 20 -0.182777 0.000000 0.000000

1 -0.113750 0.000000 0.000000

2 1.569241 0.000000 0.000000

3 1.230427 0.000000 -0.408792

4 1.342502 0.000000 -1.078444

5 0.730472 -0.835126 0.845470

6 -0.455549 -1.051597 0.875379

对reindex适用的方法同样适用于fillna:

df.fillna(method = 'ffill')

Out[82]:

0 1 20 0.441535 -0.330724 0.789183

1 0.666540 1.958989 -0.817482

2 -2.027360 0.416607 0.052060

3 -0.163996 -0.682905 0.926443

4 -1.163515 1.788535 -2.014879

5 0.483060 -1.225616 -0.021665df.fillna(method='ffill',limit = 2)

Out[83]:

0 1 20 0.441535 -0.330724 0.789183

1 0.666540 1.958989 -0.817482

2 -2.027360 0.416607 0.052060

3 -0.163996 -0.682905 0.926443

4 -1.163515 1.788535 -2.014879

5 0.483060 -1.225616 -0.021665

2、层次化索引

在一个轴上拥有多个(两个以上)的索引级别,可以低维度形式处理高纬度数据。创建一个Series,并用一个列表或数组组成的列表作为索引。

data =pd.Series(np.random.randn(10),index = [['a','a','a','b','b','b','c','c','d','d'],[1,2,3,1,2,3,1,2,2,3]])

data

Out[90]:

a 1 1.263309

2 -1.726591

3 0.084191b 1 3.110524

2 -1.285000

3 0.741029c 1 -1.443983

2 -0.775486d 2 1.340332

3 -0.066965dtype: float64

可用unstack聚合函数将DataFrame聚合:

data.unstack() #逆运算是stack

Out[92]:

1 2 3a 1.263309 -1.726591 0.084191b 3.110524 -1.285000 0.741029c -1.443983 -0.775486NaN

d NaN 1.340332 -0.066965

重排分级顺序:

frame = pd.DataFrame(np.arange(12).reshape((4,3)),index = [['a','a','b','b'],[1,2,1,2]],columns = [['Ohio','Ohio','Colorado'],['Green','Red','Green']])

frame

Out[101]:

Ohio Colorado

Green Red Green

a 1 0 1 2

2 3 4 5b 1 6 7 8

2 9 10 11frame.index.names = ['key1','key2']

frame.columns.names = ['state','color']

frame

Out[104]:

state Ohio Colorado

color Green Red Green

key1 key2

a 1 0 1 2

2 3 4 5b 1 6 7 8

2 9 10 11

用swaplevel来进行转换外层级别:

frame.swaplevel('key1','key2')

Out[105]:

state Ohio Colorado

color Green Red Green

key2 key1

1 a 0 1 2

2 a 3 4 5

1 b 6 7 8

2 b 9 10 11

sortlevel(1) swaplevel(0,1) 对索level进行排序

使用DataFrame的列:DataFrame的sex_index函数会将其一个或多个列转换为行索引,并创建一个新索引

frame = pd.DataFrame({'a':range(7),'b':range(7,0,-1),'c':['one','one','one','two','two','two','tow'],'d':[0,1,2,0,1,2,3]})

frame

Out[115]:

a b c d

0 0 7one 0

1 1 6 one 1

2 2 5 one 2

3 3 4two 0

4 4 3 two 1

5 5 2 two 2

6 6 1 tow 3frame2 = frame.set_index(['c','d']) #默认情况下,那些列会从DataFrame中移除,但可以添加 drop = False 来

frame2

Out[117]:

a b

c d

one 0 0 7

1 1 6

2 2 5two 0 3 4

1 4 3

2 5 2tow 3 6 1

不考虑索引类型的、基于位置的索引,可以使用Series的iget_value方法和DataFrame的irow和icol方法:

ser3 = pd.Series(range(3),index = [-5,1,3])

ser3.iget_value(2) #基于索引位置的值

Out[129]: 2frame = pd.DataFrame(np.arange(6).reshape(3,2),index = [2,0,1])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值