首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python-pandas 数据分析

import pandas as pd

import numpy as np

d = pd.Series(range(20))

print(d.cumsum()) # 计算前n项的累加和

'''

pandas有两种数据类型:Series(类似于一维的数据操作) 和 DataFrame(二维以及多维的数据操作)

Series类型由一组数据及与之相关的数据索引组成

'''

a = pd.Series([9, 8, 7 ,6])

print(a)

'''

可以自定义索引

'''

b = pd.Series([9, 8, 7, 6], index=['a', 'b', 'c', 'd']) # index可以省略

print(b)

'''

Series类型可以由如下类型创建:

• Python列表

• 标量值

• Python字典

• ndarray

• 其他函数

'''

'''

从标量创建, index表达Series类型的尺寸

'''

s = pd.Series(25, index=['a', 'b', 'c']) # 此处的index不能省略

print(s)

'''

从字典创建

'''

d = pd.Series({'a': 9, "b": 8, "c": 7})

print(d)

e = pd.Series({'a': 9, "b": 8, "c": 7}, index=['c', 'b', 'a', 'd'])

print(e)

'''

从ndarray创建

'''

n = pd.Series(np.arange(5))

print(n)

m = pd.Series(np.arange(5), index=np.arange(9, 4, -1))

print(m)

'''

Series类型包括index和values两部分

.index 获得索引

.values 获得数据

'''

print(b.index)

print(b.values)

'''

自定义索引和自动索引,两套索引并存,但不能同时使用

'''

print(b['b'])

print(b[1])

print(b[['c', 'd', 0]])

'''

基本操作

'''

print(b[3])

print(b[:3])

print(b[b > b.median()])

print(np.exp(b))

print('c' in b)

print(0 in b)

print(b.get('f'))

print(b.get('f', 100))

'''

对齐操作: Series类型在运算中会自动对齐不同索引的数据

'''

r = pd.Series([1, 2, 3], ['c', 'd', 'e'])

t = pd.Series([9, 8, 7, 6], ['a', 'b', 'c', 'd'])

print(r + t)

'''Series 的计算是基于索引的计算'''

'''

Series类型的name属性

Series对象和索引都可以有一个名字,存储在属性.name中

'''

print(b.name)

b.name = 'Series对象'

b.index.name = '索引列'

print(b)

'''

Series对象的修改

Series对象可以随时修改并随时生效

'''

b['a'] = 15

b.name = 'Series'

print(b)

b.name = 'New Series'

b['b', 'c'] = 20

print(b)

'''

Series是一维带'标签'的数组

Series基本操作类似ndarray和字典,根据索引对齐,基于索引计算

'''

'''

DataFrame类型

DataFrame类型由共用相同索引的一组列组成,即索引 + 多列数据

DataFrame是一个表格型的数据类型,每列值类型可以不同

DataFrame既有行索引、也有列索引

DataFrame常用于表达二维数据,但可以表达多维数据

DataFrame类型可以由如下类型创建:

• 二维ndarray对象

• 由一维ndarray、列表、字典、元组或Series构成的字典

• Series类型

• 其他的DataFrame类型

'''

'''

二维ndarray对象

'''

d1 = pd.DataFrame(np.arange(10).reshape(2, 5))

print(d1)

'''

从一维ndarray对象字典创建

'''

dt = {'one': pd.Series([2, 3, 4], index=['a', 'b', 'c']),

'two': pd.Series([9, 8, 7, 6], index=['a', 'b', 'c', 'd'])}

d2 = pd.DataFrame(dt)

print(d2)

print(pd.DataFrame(dt, index=['b', 'c', 'd'], columns=['two', 'three']))

'''数据会根据行列索引自动补齐'''

'''

从列表类型的字典创建

'''

dt1 = {'one': [1, 2, 3, 4], 'two': [9, 8, 7, 6]}

d3 = pd.DataFrame(dt1, index=['a', 'b', 'c', 'd'])

print(d3)

d6 = {'城市': ['北京', '上海', '广州', '深圳', '沈阳'],

'环比': [101.5, 101.2, 101.3, 102.2, 100.1],

'同比': [120.7, 127.3, 119.4, 140.9, 101.4],

'定基': [121.4, 127.8, 120.0, 145.5, 101.6]}

d7 = pd.DataFrame(d6, index=['c1', 'c2', 'c3', 'c4', 'c5'])

print(d7)

print(d7.index)

print(d7.columns)

print(d7.values)

print(d7['同比'])

print(d7.ix['c2'])

print(d7['同比']['c2'])

'''

DataFrame是二维带“标签”数组

DataFrame基本操作类似Series,依据行列索引

'''

'''

pandas库的数据类型操作

重新索引:.reindex()能够改变或重排Series和DataFrame索引

.reindex(index=None, columns=None, …)的参数

参数 说明

index, columns 新的行列自定义索引

fill_value 重新索引中,用于填充缺失位置的值

method 填充方法, ffill当前值向前填充,bfill向后填充

limit 最大填充量

copy 默认True,生成新的对象,False时,新旧相等不复制

'''

d7 = d7.reindex(index=['c5', 'c4', 'c3', 'c2', 'c1'])

print(d7)

print(d7.reindex(columns = ['城市', '同比', '环比', '定基']))

newc = d7.columns.insert(4, '新增')

print(newc)

newd = d7.reindex(columns=newc, fill_value=200)

print(newd)

print(d7.index)

print(d7.columns)

'''

Series和DataFrame的索引是Index类型

Index对象是不可修改类型

索引类型的常用方法:

方法 说明

.append(idx) 连接另一个Index对象,产生新的Index对象

.diff(idx) 计算差集,产生新的Index对象

.intersection(idx) 计算交集

.union(idx) 计算并集

.delete(loc) 删除loc位置处的元素

.insert(loc,e) 在loc位置增加一个元素e

'''

nc = d7.columns.delete(3)

ni = d7.index.insert(5, 'c0')

# nd = d7.reindex(index=ni, columns=nc, method='ffill')

# 上边这行会报错:ValueError: index must be monotonic increasing or decreasing,改成下边这种形式的就可以

nd = d7.reindex(index=ni, columns=nc).ffill()

print(nd)

'''

删除指定索引对象

.drop()能够删除Series和DataFrame指定行或列索引

'''

print(d7)

print(d7.drop('c5'))

print(d7.drop('同比', axis=1))

print(a)

print(a.drop([2, 3]))

'''

pandas库的数据类型运算

算术运算根据行列索引,补齐后运算,运算默认产生浮点数

补齐时缺项填充NaN (空值)

二维和一维、一维和零维间为广播运算

采用+ ‐ * /符号进行的二元运算产生新的对象

方法形式的运算:

方法 说明

.add(d, **argws) 类型间加法运算,可选参数

.sub(d, **argws) 类型间减法运算,可选参数

.mul(d, **argws) 类型间乘法运算,可选参数

.div(d, **argws) 类型间除法运算,可选参数

'''

m1 = pd.DataFrame(np.arange(12).reshape(3, 4))

n1 = pd.DataFrame(np.arange(20).reshape(4, 5))

print(m1 + n1)

print((m1 * n1))

# 自动补齐,缺项补NAN

print(n1.add(m1, fill_value = 100))

print(n1.mul(m1, fill_value = 0))

# fill_value参数替代NaN,替代后参与运算

m2 = pd.Series(np.arange(4))

print(m2 - 10)

print(n1 - m2)

# 不同维度间为广播运算,一维Series默认在轴1参与运算

print(n1.sub(m2, axis=0))

# 使用运算方法可以令一维Series参与轴0运算

'''

比较运算法则

比较运算只能比较相同索引的元素,不进行补齐

二维和一维、一维和零维间为广播运算

采用> =

'''

a1 = pd.DataFrame(np.arange(12).reshape(3, 4))

b1 = pd.DataFrame(np.arange(12, 0, -1).reshape(3, 4))

print(a1 > b1)

print(a1 == b1)

# 同维度运算,尺寸一致

c1 = pd.Series(np.arange(4))

print(a1 > c1)

print(c1 > 0)

# 不同维度,广播运算,默认在1轴

'''

小结:

Series = 索引 + 一维数据

DataFrame = 行列索引 + 二维数据

理解数据类型与索引的关系,操作索引即操作数据

重新索引、数据删除、算术运算、比较运算

像对待单一数据一样对待Series和DataFrame对象

'''

import numpy as np

import pandas as pd

'''

pandas数据特征分析

pandas库的数据排序

.sort_index()方法在指定轴上根据索引进行排序,默认升序。默认参数为:sort_index(axis=0, ascending=True)

'''

a = pd.DataFrame(np.arange(20).reshape(4, 5), index=['c', 'b', 'a', 'd'])

print(a.sort_index())

print(a.sort_index(ascending=False))

b = a.sort_index(axis=1, ascending=False)

print(b)

print(b.sort_index())

'''

.sort_values()方法在指定轴上根据数值进行排序,默认升序

默认情况:

Series.sort_values(axis=0, ascending=True)

DataFrame.sort_values(by, axis=0, ascending=True)

by : axis轴上的某个索引或索引列表

.sort_values(by, axis=0, ascending=True)

'''

c = a.sort_values(2, ascending=True)

print(c)

print(c.sort_values('a', axis=1, ascending=False))

print(c.sort_values(0, ascending=False))

'''

NaN统一放到排序末尾

'''

d = pd.DataFrame(np.arange(12).reshape(3, 4), index=['a', 'b', 'c'])

e = a + d

print(e)

print(e.sort_values(2, ascending=False))

print(e.sort_values(2, ascending=True))

'''

数据的基本统计分析

基本的统计分析函数:

适用于Series和DataFrame类型

方法 说明

.sum() 计算数据的总和,按0轴计算,下同

.count() 非NaN值的数量

.mean() .median() 计算数据的算术平均值、算术中位数

.var() .std() 计算数据的方差、标准差

.min() .max() 计算数据的最小值、最大值

适用于Series类型:

方法 说明

.argmin() .argmax() 计算数据最大值、最小值所在位置的索引位置(自动索引)

.idxmin() .idxmax() 计算数据最大值、最小值所在位置的索引(自定义索引)

适用于Series和DataFrame类型:

方法 说明

.describe() 针对0轴(各列)的统计汇总

'''

a1 = pd.Series([9, 8, 7, 6], index=['a', 'b', 'c', 'd'])

print(a1.describe())

print(type(a1.describe()))

print(a1.describe()['count'])

b1 = pd.DataFrame(np.arange(20).reshape(4, 5), index=['c', 'a', 'd', 'b'])

print(b1.describe())

print(type(b1.describe()))

print(b1.describe().ix['max'])

print(b1.describe()[2])

'''

数据的累计统计分析

针对0轴(各列)的统计汇总

适用于Series和DataFrame类型,累计计算

方法 说明

.cumsum() 依次给出前1、2、…、n个数的和

.cumprod() 依次给出前1、2、…、n个数的积

.cummax() 依次给出前1、2、…、n个数的最大值

.cummin() 依次给出前1、2、…、n个数的最小值

'''

print(b1.cumsum())

print(b1.cumprod())

print(b1.cummax())

print(b1.cummin())

'''

针对0轴(各列)的统计汇总

适用于Series和DataFrame类型,滚动计算(窗口计算)

方法 说明

.rolling(w).sum() 依次计算相邻w个元素的和

.rolling(w).mean() 依次计算相邻w个元素的算术平均值

.rolling(w).var() 依次计算相邻w个元素的方差

.rolling(w).std() 依次计算相邻w个元素的标准差

.rolling(w).min() .max() 依次计算相邻w个元素的最小值和最大值

'''

print(b1)

print(b1.rolling(2).sum())

print(b1.rolling(3).sum())

'''

数据的相关分析

相关性

• X增大,Y增大,两个变量正相关

• X增大,Y减小,两个变量负相关

• X增大,Y无视,两个变量不相关

协方差:

• 协方差>0, X和Y正相关

• 协方差

• 协方差=0, X和Y独立无关

Pearson相关系数

• 0.8‐1.0 极强相关

• 0.6‐0.8 强相关

• 0.4‐0.6 中等程度相关

• 0.2‐0.4 弱相关

• 0.0‐0.2 极弱相关或无相关

相关性分析函数:

适用于Series和DataFrame类型

方法 说明

.cov() 计算协方差矩阵

.corr() 计算相关系数矩阵, Pearson、Spearman、Kendall等系数

'''

price = pd.Series([3.04, 22.93, 12.75, 22.6, 12.33], index=['2008', '2009', '2010', '2011', '2012'])

m2 = pd.Series([8.18, 18.38, 9.13, 7.82, 6.69], index=['2008', '2009', '2010', '2011', '2012'])

print(price.corr(m2))

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200430A0P8NZ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券