文章目录

  • 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相关推荐

  1. garch预测 python_数据科学方面的Python库,实用!

    作者:Python开发与大数据人工智能原文:公众号 Python开发与大数据人工智能 Python是一种很棒的编程语言.事实上,它还是世界上发展最快的编程语言之一.它一次又一次证明了它在数据科学职位中 ...

  2. 机器学习-数据科学库-day6

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 机器学习-数据科学库-day6 pandas学习 动手练习 pandas中的时间序列 生成一段时间范围 关于频率的更多缩写 在Data ...

  3. 机器学习-数据科学库-day5

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 机器学习-数据科学库-day5 pandas学习 pandas之DataFrame pandas常用统计方法 将字符串离散化 数据合并 ...

  4. 机器学习-数据科学库-day1

    机器学习-数据科学库-day1 机器学习-数据科学库-day1 matplotlib 机器学习-数据科学库-day1 数据分析课程包括: 基础概念与环境 matplotlib numpy pandas ...

  5. python数据科学库_Python数据科学库

    python数据科学库 什么是数据科学? (What is Data Science?) We live in an information age, where the challenge is t ...

  6. Neo4J入门笔记[2]---Neo4J GDS 图数据科学库

    Neo4J 提供了GDS的库,里面包括了很多算法.GDS的英语全称是Graph Data Science(图数据科学库),其句法流程如下: stream Returns the result of t ...

  7. Python 数据科学库入门

    Python 数据科学库入门 1.Numpy 1.1Numpy 简介 Numpy(Numerical Python) Numpy:提供了一个在 Python 中做科学计算的基础库,重在数值计算,主要用 ...

  8. 机器学习-数据科学库:matplotlib绘图

    机器学习-数据科学库:matplotlib绘图 matplotlib绘图 matplotlib折线图 matplotlib散点图 matplotlib条形图 matplotlib直方图 对比常用统计图 ...

  9. Neoj图数据科学库(The Neo4j graph data science library)使用指南

    目录 介绍 算法 图目录 版本 安装 支持的Neo4j版本 Neo4j Desktop Neo4j Server Enterprise 版本配置 Neo4j Docker Neo4j Causal C ...

最新文章

  1. 设置datagridview的数据源为(DATASET)SQL查寻结果
  2. 推荐 6 个好用到爆的 Pycharm 插件
  3. MyBatis架构分层
  4. 【js】callback时代的变更
  5. git 无法拉取项目,本地ping不通github的解决办法(详解)
  6. Spring RESTFul Client – RestTemplate Example--转载
  7. unique函数详解
  8. Spring Boot工程支持HTTP和HTTPS,HTTP重定向HTTPS
  9. Nature:压榨学生,论资排辈,现行论文作者制度已死
  10. 【WPF学习笔记】之如何点击“新建”按钮,在面板中加载一条条的“用户控件”的信息:动画系列之(四)...
  11. Android 视频展示控件之 SurfaceView、GLSurfaceView、SurfaceTexture、TextureView 对比总结...
  12. java开发mac pro_苹果三款神秘 Mac 现身 macOS Big Sur 11.0.1 beta
  13. 小米游戏本bios更新_小米笔记本电脑bios升级方法图文步骤
  14. 谷歌浏览器 cococut version 视频下载插件配合倍速插件快速下载视频
  15. 产品是什么:PMF模型
  16. 宝塔面板关键目录解析
  17. Linux:移植ffmpeg到ARM板(含x264编译步骤)
  18. 基于业务流程管理框架的企业敏捷性研究
  19. MA、BMA、PPP网络类型实验
  20. Python 如何将视频文件的语音转换为文字,良心之作!

热门文章

  1. 彻底弄懂<script>标签
  2. 美国政府与科技巨头讨论开源软件安全、近八万网站受开源软件漏洞影响|1月18日全球网络安全热点
  3. 激光雷达动态障碍物滤除:调研与展望
  4. MATLAB制作视频
  5. 详解spring事务失效和回滚失败的场景
  6. jQuery-tmpl 模板引擎使用方法说明
  7. 帷幕的帷是什么意思_CIFF上海虹桥 | 意思设计展墙美术馆入驻建筑模型博物馆...
  8. 普通人学习区块链如何就业?
  9. 给我讲讲数学的三角函数
  10. Google DeepMind在全球使用AI的10种方式