Python_数据科学库_pandas
文章目录
- 1 什么是pandas
- 2 Series
- 2.1 Series创建
- 2.1.1 通过numpy创建
- 2.1.2 通过字典创建
- 2.2 索引和切片
- 2.2.1 按照位置和index取值
- 2.2.2 布尔索引
- 2.2.3 陌生Series取值
- 2.3 读取外部数据
- 3 DataFrame
- 3.1 创建DataFrame
- 3.1.1 通过numpy创建
- 3.1.2 通过字典创建
- 3.2 DataFrame 属性和方法
- 3.3 排序
- 3.4 索引和切片
- 3.4.1 取行或者列
- 3.4.2 loc 和 iloc
- 3.4.2.1 loc 取某一行或列
- 3.4.2.2 loc 取多行或多列
- 3.4.2.3 iloc取某一行或列
- 3.4.2.4 iloc 取多行或多列
- 3.4.2.5 赋值
- 3.4.3 布尔索引
- 3.5 缺失数据处理
- 3.5.1 pd.isnull()进行布尔索引
- 3.5.2 dropna()删除含有nan的行
- 3.5.3 填充数据
- 3.5.3.1 直接填充某个具体数值
- 3.5.3.2 填充均值
- 3.5.3.3 某一列填充均值
- 3.6 数据统计
1 什么是pandas
numpy能够帮助我们处理数值,但是pandas除了处理数值之外(基于numpy),还能够帮助我们处理其他类型的数据
pandas is an open source, BSD-licensed library providing high-performance, easy-to-use data structures and data analysis tools for the Python programming language.
2 Series
2.1 Series创建
2.1.1 通过numpy创建
import pandas as pd
a = pd.Series([1,2,32,121,43,12])
print(a)
# 0 1
# 1 2
# 2 32
# 3 121
# 4 43
# 5 12
# dtype: int64
print(type(a))
# <class 'pandas.core.series.Series'>
t2 = pd.Series([1,2,3,4,5],index=list('ABCDE'))
print(t2)
# A 1
# B 2
# C 3
# D 4
# E 5
# dtype: int64
2.1.2 通过字典创建
字典的值有一个为字符串,该Series的dtype就为object
import pandas as pd
temp_dict = {'name':'alex','age':18,'tel':10086}
t3 = pd.Series(temp_dict)
print(t3)
# name alex
# age 18
# tel 10086
# dtype: object
2.2 索引和切片
2.2.1 按照位置和index取值
import pandas as pd
temp_dict = {'name':'alex','age':18,'tel':10086}
t3 = pd.Series(temp_dict)
print(t3['age']) #18,通过index取
print(t3[1]) #18,通过位置取print(t3[:2]) #取连续多行,亦可以写成 t3[:'tel']
# name alex
# age 18
# dtype: object
print('*'*100)
print(t3[['name','tel']])#取不连续的多行,亦可以写成 t3[[0,2]]
# name alex
# tel 10086
# dtype: object
2.2.2 布尔索引
import pandas as pd
a = pd.Series([1,2,32,121,43,12])
print(a[a>30])
# 2 32
# 3 121
# 4 43
# dtype: int64
2.2.3 陌生Series取值
ndarry 支持for循环和list转化以及索引切片
t.index 也支持for循环和list转化以及索引切片
两者都是可迭代对象,都具有__iter__
方法
import pandas as pd
temp_dict = {'name':'alex','age':18,'tel':10086}
t3 = pd.Series(temp_dict)print(t3.index) #Index(['name', 'age', 'tel'], dtype='object')for i in t3.index:print(i)
# name
# age
# telprint(type(t3.index)) #<class 'pandas.core.indexes.base.Index'>print(list(t3.index)[:2]) #['name', 'age']print(t3.values) #['alex' 18 10086]print(type(t3.values)) #<class 'numpy.ndarray'>
2.3 读取外部数据
现在假设我们有一个组关于狗的名字的统计数据,那么为了观察这组数据的情况,我们应该怎么做呢?
我们的这组数据存在csv中,我们直接使用pd. read_csv即可
和我们想象的有些差别,我们以为他会是一个Series类型,但是他是一个DataFrame
import pandas as pd
#pandas读取csv中的文件
df = pd.read_csv('dogNames2.csv')
print(df)
# Row_Labels Count_AnimalName
# 0 RENNY 1
# 1 DEEDEE 2
# 2 GLADIATOR 1
# 3 NESTLE 1
# 4 NYKE 1
# ... ... ...
# 4159 ALEXXEE 1
# 4160 HOLLYWOOD 1
# 4161 JANGO 2
# 4162 SUSHI MAE 1
# 4163 GHOST 3
#
# [4164 rows x 2 columns]
3 DataFrame
3.1 创建DataFrame
DataFrame对象既有行索引,又有列索引
行索引,表明不同行,横向索引,叫index,0轴,axis=0
列索引,表名不同列,纵向索引,叫columns,1轴,axis=1
3.1.1 通过numpy创建
import pandas as pd
import numpy as npdf = pd.DataFrame(np.arange(12).reshape((3,4)),index = list('abc'),columns=list('WXYZ'))
print(df)
# W X Y Z
# a 0 1 2 3
# b 4 5 6 7
# c 8 9 10 11
3.1.2 通过字典创建
import pandas as pdd1 = {'name':['alex','peter'],'age':[20,32],'tel':[10086,10010]}
#每个coloum下的个数必须一致
df1 = pd.DataFrame(d1)
print(df1)
# name age tel
# 0 alex 20 10086
# 1 peter 32 10010
print(type(df1)) #<class 'pandas.core.frame.DataFrame'>t2 = [{'name':'alex','age':32,'tel':10086},{'name':'peter','age':19,'tel':10010}]
#可以存在部分值缺失
df2 = pd.DataFrame(t2)
print(df2)
# name age tel
# 0 alex 32.0 10086.0
# 1 peter NaN 10010.0
# 2 john 34.0 NaN
3.2 DataFrame 属性和方法
import pandas as pdt2 = [{'name':'alex','age':32,'tel':10086},{'name':'peter','tel':10010},{'name':'john','age':34}]
df2 = pd.DataFrame(t2)
# name age tel
# 0 alex 32.0 10086.0
# 1 peter NaN 10010.0
# 2 john 34.0 NaN
print(df2.index)
#RangeIndex(start=0, stop=3, step=1)
print(df2.columns)
# Index(['name', 'age', 'tel'], dtype='object')
print(df2.values)
# [['alex' 32.0 10086.0]
# ['peter' nan 10010.0]
# ['john' 34.0 nan]]
print(df2.shape) #(3, 3)
print(df2.ndim) #2
import pandas as pdt2 = [{'name':'alex','age':32,'tel':10086},{'name':'peter','tel':10010},{'name':'john','age':34}]
df2 = pd.DataFrame(t2)
# name age tel
# 0 alex 32.0 10086.0
# 1 peter NaN 10010.0
# 2 john 34.0 NaN
print(df2.head(2))
print(df2.tail(2))
print(df2.info())
print(df2.describe())
3.3 排序
import pandas as pd
df = pd.read_csv('dogNames2.csv')#dataFrame中排序的方法
df = df.sort_values(by='Count_AnimalName',ascending=False) #默认升序
print(df.head(5))
# Row_Labels Count_AnimalName
# 858 BELLA 112
# 4134 MAX 82
# 3273 LUCY 82
# 843 BUDDY 79
# 433 SADIE 77
3.4 索引和切片
3.4.1 取行或者列
import pandas as pd
df = pd.read_csv('dogNames2.csv')#dataFrame中排序的方法
df = df.sort_values(by='Count_AnimalName',ascending=False) #默认升序
# pandas取行或列的注意点
# 方括号写数字,表示取行,对行进行操作
# 写字符串,表示取列索引,对列进行操作
print(df[:20]) #取前20行
print(df['Row_Labels']) #取具体某一列,类型为Series
3.4.2 loc 和 iloc
1.df.loc 通过标签索引行数据
2.df.iloc 通过位置获取行数据
3.4.2.1 loc 取某一行或列
print(df.loc['a',:],type(df.loc['a',:])) #取行,Series
print(df.loc['a'],type(df.loc['a'])) #取行,Series
print(df.loc[:,'Z'],type(df.loc[:,'Z'])) #取列,Series
3.4.2.2 loc 取多行或多列
import pandas as pd
import numpy as npdf = pd.DataFrame(np.arange(12).reshape((3,4)),index = list('abc'),columns=list('WXYZ'))
# W X Y Z
# a 0 1 2 3
# b 4 5 6 7
# c 8 9 10 11
print(df.loc[['a','c']]) #取不连续的多行
# W X Y Z
# a 0 1 2 3
# c 8 9 10 11
print(df.loc[:,['W','Z']]) #取不连续的多列
# W Z
# a 0 3
# b 4 7
# c 8 11
print(df.loc[['a','c'],['W','Z']]) #取不连续的多行,多列
# W Z
# a 0 3
# c 8 11
print(df.loc['a':'c','W':'Y']) #取连续的多行多列,冒号在loc里是闭合的
# W X Y
# a 0 1 2
# b 4 5 6
# c 8 9 10
3.4.2.3 iloc取某一行或列
import pandas as pd
import numpy as npdf = pd.DataFrame(np.arange(12).reshape((3,4)),index = list('abc'),columns=list('WXYZ'))
# W X Y Z
# a 0 1 2 3
# b 4 5 6 7
# c 8 9 10
print(df.iloc[1])
# W 4
# X 5
# Y 6
# Z 7
print(df.iloc[:,1])
# a 1
# b 5
# c 9
3.4.2.4 iloc 取多行或多列
import pandas as pd
import numpy as npdf = pd.DataFrame(np.arange(12).reshape((3,4)),index = list('abc'),columns=list('WXYZ'))
# W X Y Z
# a 0 1 2 3
# b 4 5 6 7
# c 8 9 10
print(df.iloc[[0,2]]) #取不连续的多行
# W X Y Z
# a 0 1 2 3
# c 8 9 10 11
print(df.iloc[:,[0,3]]) #取不连续的多列
# W Z
# a 0 3
# b 4 7
# c 8 11
print(df.iloc[[0,2],[0,3]]) #取不连续的多行,多列
# W Z
# a 0 3
# c 8 11
print(df.iloc[0:2,0:3]) #取连续的多行多列 iloc冒号是不闭合的
# W X Y
# a 0 1 2
# b 4 5 6
# c 8 9 10
3.4.2.5 赋值
import pandas as pd
import numpy as npdf = pd.DataFrame(np.arange(12).reshape((3,4)),index = list('abc'),columns=list('WXYZ'))
# W X Y Z
# a 0 1 2 3
# b 4 5 6 7
# c 8 9 10df.iloc[[0,2],[0,3]] = np.nan #直接自动赋值成nan
print(df)
# W X Y Z
# a NaN 1 2 NaN
# b 4.0 5 6 7.0
# c NaN 9 10 NaN
3.4.3 布尔索引
回到之前狗的名字的问题上,假如我们想找到所有的使用次数超过800的狗的名字,应该怎么选择?
import pandas as pd
df = pd.read_csv('dogNames2.csv')
df = df[df['Count_AnimalName']>80]
print(df)
# Row_Labels Count_AnimalName
# 858 BELLA 112
# 3273 LUCY 82
# 4134 MAX 82
多个条件and &; or |
import pandas as pd
df = pd.read_csv('dogNames2.csv')
df = df[(df['Count_AnimalName']>70)&(df['Count_AnimalName']<200)].sort_values(by = 'Count_AnimalName',ascending=False)
print(df)
# Row_Labels Count_AnimalName
# 858 BELLA 112
# 3273 LUCY 82
# 4134 MAX 82
# 843 BUDDY 79
# 433 SADIE 77
回到之前狗的名字的问题上,假如我们想找到所有的使用次数超过70并且名字的字符串的长度大于4的狗的名字,应该怎么选择?
3.5 缺失数据处理
我们的数据缺失通常有两种情况:
一种就是空,None等,在pandas是NaN(和np.nan一样)
另一种是我们让其为0,蓝色框中
判断数据是否为NaN:pd.isnull(df),pd.notnull(df)
处理方式1:删除NaN所在的行列dropna (axis=0, how=‘any’, inplace=False)
处理方式2:填充数据,t.fillna(t.mean()),t.fiallna(t.median()),t.fillna(0)
处理为0的数据:t[t==0]=np.nan
当然并不是每次为0的数据都需要处理
计算平均值等情况,nan是不参与计算的,但是0会
3.5.1 pd.isnull()进行布尔索引
import pandas as pd
import numpy as npdf = pd.DataFrame(np.arange(12).reshape((3,4)),index = list('abc'),columns=list('WXYZ'))df.iloc[[0,2],[0,3]] = np.nan #直接自动赋值成nan
print(df)
df1 = pd.isnull(df)
print(df1)
# W X Y Z
# a True False False True
# b False False False False
# c True False False Trueprint(df[pd.notnull(df['W'])])
# W X Y Z
# b 4.0 5 6 7.0
3.5.2 dropna()删除含有nan的行
import pandas as pd
import numpy as npdf = pd.DataFrame(np.arange(12).reshape((3,4)),index = list('abc'),columns=list('WXYZ'))df.iloc[[0,2],[0,3]] = np.nan #直接自动赋值成nan
print(df)
# W X Y Z
# a NaN 1 2 NaN
# b 4.0 5 6 7.0
# c NaN 9 10 NaNdf.dropna(axis=0,how= 'any',inplace=True)
#删除为nan的行,how默认为any;改为all,全部为nan才删除该行
#inplace=True 原地修改,不需要重新赋值给变量;默认为False
print(df)
# W X Y Z
# b 4.0 5 6 7.0
3.5.3 填充数据
3.5.3.1 直接填充某个具体数值
import pandas as pd
import numpy as npdf = pd.DataFrame(np.arange(12).reshape((3,4)),index = list('abc'),columns=list('WXYZ'))df.iloc[[0,2],[0,3]] = np.nan #直接自动赋值成nan
print(df)
# W X Y Z
# a NaN 1 2 NaN
# b 4.0 5 6 7.0
# c NaN 9 10 NaNdf = df.fillna(100)
print(df)
# W X Y Z
# a 100.0 1 2 100.0
# b 4.0 5 6 7.0
# c 100.0 9 10 100.0
3.5.3.2 填充均值
import pandas as pd
import numpy as npdf = pd.DataFrame(np.arange(12).reshape((3,4)),index = list('abc'),columns=list('WXYZ'))df.iloc[[0,2],[0,3]] = np.nan #直接自动赋值成nan
print(df)
# W X Y Z
# a NaN 1 2 NaN
# b 4.0 5 6 7.0
# c NaN 9 10 NaNdf = df.fillna(df.mean()) #填充均值
print(df)
# W X Y Z
# a 4.0 1 2 7.0
# b 4.0 5 6 7.0
# c 4.0 9 10 7.0
3.5.3.3 某一列填充均值
import pandas as pd
import numpy as npdf = pd.DataFrame(np.arange(12).reshape((3,4)),index = list('abc'),columns=list('WXYZ'))df.iloc[[0,2],[0,3]] = np.nan #直接自动赋值成nan
print(df)
# W X Y Z
# a NaN 1 2 NaN
# b 4.0 5 6 7.0
# c NaN 9 10 NaNdf['W'] = df['W'].fillna(df['W'].mean())
print(df)
# W X Y Z
# a 4.0 1 2 NaN
# b 4.0 5 6 7.0
# c 4.0 9 10 NaN
3.6 数据统计
import pandas as pddf = pd.read_csv('datasets_IMDB-Movie-Data.csv')
#获取平均评分
print(round(df['Rating'].mean(),2))#获取导演的人数
print(len(set(df['Director'].tolist())))
print(len(df['Director'].unique()))#获取演员的人数
temp_actors_list = df['Actors'].str.split(',').tolist()
actors_list = [i for j in temp_actors_list for i in j]
actors_num = len(set(actors_list))
print(actors_num)#runtime 分布情况
#选择图形,直方图
runtime_data = df['Runtime (Minutes)'].values
max_runtime = runtime_data.max()
min_runtime = runtime_data.min()
#计算组数
num_bin = (max_runtime-min_runtime)//5
#设置图形大小
plt.figure(figsize=(20,8),dpi=80)
plt.hist(runtime_data,num_bin)
plt.xticks(range(min_runtime,max_runtime+5,5))
plt.show()
Python_数据科学库_pandas相关推荐
- garch预测 python_数据科学方面的Python库,实用!
作者:Python开发与大数据人工智能原文:公众号 Python开发与大数据人工智能 Python是一种很棒的编程语言.事实上,它还是世界上发展最快的编程语言之一.它一次又一次证明了它在数据科学职位中 ...
- 机器学习-数据科学库-day6
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 机器学习-数据科学库-day6 pandas学习 动手练习 pandas中的时间序列 生成一段时间范围 关于频率的更多缩写 在Data ...
- 机器学习-数据科学库-day5
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 机器学习-数据科学库-day5 pandas学习 pandas之DataFrame pandas常用统计方法 将字符串离散化 数据合并 ...
- 机器学习-数据科学库-day1
机器学习-数据科学库-day1 机器学习-数据科学库-day1 matplotlib 机器学习-数据科学库-day1 数据分析课程包括: 基础概念与环境 matplotlib numpy pandas ...
- python数据科学库_Python数据科学库
python数据科学库 什么是数据科学? (What is Data Science?) We live in an information age, where the challenge is t ...
- Neo4J入门笔记[2]---Neo4J GDS 图数据科学库
Neo4J 提供了GDS的库,里面包括了很多算法.GDS的英语全称是Graph Data Science(图数据科学库),其句法流程如下: stream Returns the result of t ...
- Python 数据科学库入门
Python 数据科学库入门 1.Numpy 1.1Numpy 简介 Numpy(Numerical Python) Numpy:提供了一个在 Python 中做科学计算的基础库,重在数值计算,主要用 ...
- 机器学习-数据科学库:matplotlib绘图
机器学习-数据科学库:matplotlib绘图 matplotlib绘图 matplotlib折线图 matplotlib散点图 matplotlib条形图 matplotlib直方图 对比常用统计图 ...
- Neoj图数据科学库(The Neo4j graph data science library)使用指南
目录 介绍 算法 图目录 版本 安装 支持的Neo4j版本 Neo4j Desktop Neo4j Server Enterprise 版本配置 Neo4j Docker Neo4j Causal C ...
最新文章
- 设置datagridview的数据源为(DATASET)SQL查寻结果
- 推荐 6 个好用到爆的 Pycharm 插件
- MyBatis架构分层
- 【js】callback时代的变更
- git 无法拉取项目,本地ping不通github的解决办法(详解)
- Spring RESTFul Client – RestTemplate Example--转载
- unique函数详解
- Spring Boot工程支持HTTP和HTTPS,HTTP重定向HTTPS
- Nature:压榨学生,论资排辈,现行论文作者制度已死
- 【WPF学习笔记】之如何点击“新建”按钮,在面板中加载一条条的“用户控件”的信息:动画系列之(四)...
- Android 视频展示控件之 SurfaceView、GLSurfaceView、SurfaceTexture、TextureView 对比总结...
- java开发mac pro_苹果三款神秘 Mac 现身 macOS Big Sur 11.0.1 beta
- 小米游戏本bios更新_小米笔记本电脑bios升级方法图文步骤
- 谷歌浏览器 cococut version 视频下载插件配合倍速插件快速下载视频
- 产品是什么:PMF模型
- 宝塔面板关键目录解析
- Linux:移植ffmpeg到ARM板(含x264编译步骤)
- 基于业务流程管理框架的企业敏捷性研究
- MA、BMA、PPP网络类型实验
- Python 如何将视频文件的语音转换为文字,良心之作!