Pandas 学习
pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
1.基础概念整合
DateFrame结构
-
可以读入文件,也可以将一个字典化为DateFrame:
data = {'contry':['Aa','Bb','Cc'], 'population':[10, 15, 20]}
data = pd.DateFrame(data)
此时即可手动转化出一个DateFrame
也可以使用主动命名的方式创造一个DataFrame:
data = data.DataFrame([[1,2,3],[4,5,6]], index = ['a','b','c'],
columns = ['A','B','C'])
-
属性:
-
元素信息:
data.info()
-
索引信息:
data.index()
并且无论是dataframe还是series都支持切片 -
查看某列:
xxx = data['xxx']
把那列的key值键入,即可返回对应该列的所有value,生成一个series -
表头一部分元素展示:
data.head()
:支持写入行数来自定义行数 -
更改索引值为其他参数:
data = data.set_index('name')
,此时可以把名字键入,找寻对应的属性 -
Numpy支持的运算都可以进行
-
具体图表数据分析
data.describe()
-
2.Pandas索引结构
-
同时显示两个索引数据需要用中括号包围各属性:
data[['age','name']][:5]
-
位置切片索引:
data.iloc[0:5, 1:3]
:前五行数据的1-2列 -
当使用
data = data.set_index('name')
更改索引后,想要通过指定属性找寻对应人的数据:data.loc['WXF', 'age']
,甚至可以直接用人名在冒号两边切片进行查询 -
嵌套返回包含的序列
s[s.isin([1,3,5])]
3.groupby操作
-
分类索引指定指标
data.groupby('Sex')['Age'].mean()
:索引不同性别的年龄平均值 -
agg聚合函数:在统计领域,我们常用的聚合操作有很多,比如
min(最小值)
、max(最大值)
、sum(求和)
、mean(均值)
、median(中位数)
、std(标准差)
、var(方差)
、count(计数)
等等。
4.数值计算
-
基本运算:如求和(可以指定轴和维度):
data.sum(axis = 1)
:默认第一维即按列求和 -
二元统计:
-
斜方差:
data.cov()
-
相关系数:
data.corr()
-
统计计数:
data['age'].value_counts()
:默认降序
若想改为升序:括号内填入ascending = True
若平均分组加入参数:bins = x
:平均分成5组的区间
-
5.对象操作
- 运用Series创建一个DataFrame:
data = [10,11,12]
index = ['a','b','c']
s = pd.Series(data = data, index = index)
-
修改value值:
data2 = data1.replace(to_replace = 100, value = 101, inplace = False)
最后一项默认为false意为不更改原data1的value -
修改索引值:
s2 = s1.rename(index = {'a':'A'}, inplace = True)
: inplace意为是否改变原索引,默认False -
增加条目:类似list:
s1.append(s2,ignore_index = False)
:默认为False不需要写,意思是是否遗忘原索引. 也可以类似哈希表或者是字典,对未出现的对象增加:s1['New'] = 400
,DataFrame同理 -
Series删除操作
del s1['A']
将对应索引的那一行数据删除-
若要删除多项指定数据:
s1.drop(['b','d'], inplace = Ture)
:默认为False -
DataFrame连接操作
data3 = pd.concat([data1,data2])
,可指定轴,多出来的空白数据会显示NAN
6.merge操作
pandas数据合并之一文弄懂pd.merge()
7.显示设置(set为设置,get为查看)
-
最大打印行数
pd.set_option('display.max_rows',x)
:把最大打印行数设置为x,列为columns -
字符串最大最小长度
pd.set_option('display.max_colwidth', x)
:把最大/最小字符串长度设置为x -
精度:
.pd.set_option('display.precision', x)
:把精度设置为x
8.数据透视表
-
(举例)定义一个透视表:
data1 = data.pivot(index ='Category',colunms='Month', values='Amount')
默认求平均,如果想求其他指标,可以加入如aggfunc='max'
求最大值,count
求计数 -
默认生成计数透视表函数
pd.crosstab(index = data['Sex'], columns = data['Money'])
-
(其他参数):如求和
data1.sum(axis = 1)
轴不同所求参数不同
9.时间序列操作
-
构造时间序列:
pd.Series.date_range(start='2022-05-14', periods = 10, freq = '!2H')
-
把字符串的时间转化为datetime:
data['Time'] = pd.to_datetime(data['Time'])
把时间这一列数据转化为datetime类型
一般此后会再以此作为新的索引对数据进行查看data = data.set_index('Time')
-
读取时就完成第二步的设置操作
data = pd.read_csv('路径', indx_col = 0, parse_dates = True)
-
读取切片时间数据:
data[pd.Timestamp('2020-01-01 09:00'):pd.Timestamp('2020-01-20 21:00')]
,若已经是时间格式可以去掉Timestamp -
找出指定时间
data[(data.index.hour > 8) & (data.index.hour < 12)]
10.常用操作
-
多条件排序操作
data.sort_values(by=['A','B'], ascending = [False,True], inplace=True)
使得data化为以A降序,B为升序的DataFram结构 -
重复的数据进行删除:
data.drop_duplicates()
:可以在括号写入subset = 'X'
对X对应的那一列数据为标志进行去重
11.Pandas绘图
-
数据简单绘图
data.plot()
:Series返回单线图,DataFrame返回多线图