学习笔记,这个笔记以例子为主。
开发工具:Spyder


文章目录

  • 数据框DateFrame
  • 数据结构操作(举例)
    • 列访问
    • 列添加
    • 列删除
    • 行访问
    • 行添加
    • 行删除
    • 修改DataFrame中的数据
    • DataFrame常用属性

数据框DateFrame

DataFrame是一个类似于表格的数据类型,可以理解为一个二维数组,索引有两个维度,可更改。

  • DataFrame的特点

①列可以是不同的类型
②大小可变
③标记轴(行和列)
④可以对行和列执行算术运算

  • 语法
import numpy as np
import pandas as pd#创建一个空的DataFrame对象
df = pd.DataFrame()#从列表创建DataFrame
data = [['A', 9], ['B', 12], ['C', 15]]
df = pd.DataFrame(data)#从字典创建DataFrame
data = [{'A':1, 'B':2}, {'A':3, 'B':4, 'C':5}]
df = pd.DataFrame(data)
  • 例子1(列表构造方式)

代码1:

import numpy as np
import pandas as pd#从列表创建DataFrame
data = [['Ada', 9], ['Black', 12], ['Jack', 15]]
df = pd.DataFrame(data)
print(df)

结果1:

       0   1
0    Ada   9
1  Black  12
2   Jack  15

代码2(设置列名):

data = [['Ada', 9], ['Black', 12], ['Jack', 15]]
df = pd.DataFrame(data, columns = ['name', 'age'])
print(df)
print('-'*10)
print(df.dtypes)

结果2:

    name  age
0    Ada    9
1  Black   12
2   Jack   15
----------
name    object
age      int64
dtype: object

代码3(设置数据类型):

data = [['Ada', 9], ['Black', 12], ['Jack', 15]]
df = pd.DataFrame(data, columns = ['name', 'age'],dtype = float)
print(df)
print('-'*10)
print(df.dtypes)

结果3:

    name   age
0    Ada   9.0
1  Black  12.0
2   Jack  15.0
----------
name     object
age     float64
dtype: object
  • 例子2(字典构造方式)

代码1:

import pandas as pddata = {'name':['Ada', 'Tom','Black', 'Jack'],'age':[9, 19, 12, 15]}df = pd.DataFrame(data)
print(df)

结果1:

   age   name
0    9    Ada
1   19    Tom
2   12  Black
3   15   Jack

备注:字典无序,所以构成dataframe类型时,列会自动的按照列名的首字母排序

代码2(设置行名):

df = pd.DataFrame(data, index = ['A', 'B', 'C', 'D'])
print(df)

结果2:

   age   name
A    9    Ada
B   19    Tom
C   12  Black
D   15   Jack

代码3:

df = pd.DataFrame(data, index = pd.date_range('2020-01-01', periods = 4))
print(df)

结果3:

            age   name
2020-01-01    9    Ada
2020-01-02   19    Tom
2020-01-03   12  Black
2020-01-04   15   Jack
  • 例子3(字典的其他构造方式)

代码1:

import pandas as pddata = [{'A':1, 'B':2}, {'A':3, 'B':4, 'C':5}]
df = pd.DataFrame(data)
print(df)

结果1:

   A  B    C
0  1  2  NaN
1  3  4  5.0

代码2:

import pandas as pddata = {'A':pd.Series([1, 2, 3], index = ['one', 'two', 'three']),'B':pd.Series([1, 2, 3, 4], index = ['one', 'two', 'three', 'four'])}
df = pd.DataFrame(data)
print(df)

结果2:

         A  B
four   NaN  4
one    1.0  1
three  3.0  3
two    2.0  2

数据结构操作(举例)

列访问

DataFrame的单列数据为一个Series。根据DataFrame的定义可以知晓DataFrame是一个带有标签的二维数组,每个标签相当每一列的列名。

  • 例子

①访问单列

代码:

import pandas as pddata = {'A':pd.Series([1, 2, 3], index = ['one', 'two', 'three']),'B':pd.Series([1, 2, 3, 4], index = ['one', 'two', 'three', 'four']),'C':pd.Series([6, 7, 8, 9], index = ['one', 'two', 'three', 'four'])}
df = pd.DataFrame(data)
#print('-'*10)
print(df['A'], '\n',type(df['A']))

结果:

four     NaN
one      1.0
three    3.0
two      2.0
Name: A, dtype: float64 <class 'pandas.core.series.Series'>

②访问多列

代码:

import pandas as pddata = {'A':pd.Series([1, 2, 3], index = ['one', 'two', 'three']),'B':pd.Series([1, 2, 3, 4], index = ['one', 'two', 'three', 'four']),'C':pd.Series([6, 7, 8, 9], index = ['one', 'two', 'three', 'four'])}
df = pd.DataFrame(data)print(df[['C', 'B']])

结果:

       C  B
four   9  4
one    6  1
three  8  3
two    7  2

列添加

DataFrame添加一列的方法非常简单,只需要新建一个列索引。并对该索引下的数据进行赋值操作即可。

  • 例子

代码:

import pandas as pddata = {'name':['Ada', 'Tom','Black', 'Jack'],'age':[9, 19, 12, 15]}df = pd.DataFrame(data, index = ['a1', 'a2', 'a3', 'a4'])
df['weight'] = pd.Series([8, 4, 5, 6], index = ['a1', 'a2', 'a3', 'a4'])print(df)

结果:

    age   name  weight
a1    9    Ada       8
a2   19    Tom       4
a3   12  Black       5
a4   15   Jack       6

列删除

删除某列数据需要用到pandas提供的方法pop()。

  • 例子

代码:

import pandas as pddata = {'name':['Ada', 'Tom','Black', 'Jack'],'age':[9, 19, 12, 15],'weight':[8, 4, 5, 6],'hight':[20, 35, 30, 33]}df = pd.DataFrame(data, index = ['a1', 'a2', 'a3', 'a4'])print(df)
print('-'*20)#del 方法,删除一列
del(df['weight'])
print(df)
print('-'*20)#pop方法,删除一列
df.pop('hight')
print(df)

结果:

    age  hight   name  weight
a1    9     20    Ada       8
a2   19     35    Tom       4
a3   12     30  Black       5
a4   15     33   Jack       6
--------------------age  hight   name
a1    9     20    Ada
a2   19     35    Tom
a3   12     30  Black
a4   15     33   Jack
--------------------age   name
a1    9    Ada
a2   19    Tom
a3   12  Black
a4   15   Jack

行访问

  • 例子1(切片:)

代码:

import pandas as pddata = {'name':['Ada', 'Tom','Black', 'Jack'],'age':[9, 19, 12, 15],'weight':[8, 4, 5, 6],'hight':[20, 35, 30, 33]}df = pd.DataFrame(data, index = ['a1', 'a2', 'a3', 'a4'])print(df)
print('-'*20)
print(df[1:3])

结果:

    age  hight   name  weight
a1    9     20    Ada       8
a2   19     35    Tom       4
a3   12     30  Black       5
a4   15     33   Jack       6
--------------------age  hight   name  weight
a2   19     35    Tom       4
a3   12     30  Black       5
  • 例子2(loc方法)

loc方法是针对DataFrame索引名称的切片方法,在下面的例子中,我们演示一下loc方法的使用。

代码:

import pandas as pddata = {'name':['Ada', 'Tom','Black', 'Jack'],'age':[9, 19, 12, 15],'weight':[8, 4, 5, 6],'hight':[20, 35, 30, 33]}df = pd.DataFrame(data, index = ['a1', 'a2', 'a3', 'a4'])print(df)
print('-'*20)
print(df.loc['a2'], '\n',type(df.loc['a2']))
print('-'*20)
print(df.loc[['a1', 'a3']])

结果:

    age  hight   name  weight
a1    9     20    Ada       8
a2   19     35    Tom       4
a3   12     30  Black       5
a4   15     33   Jack       6
--------------------
age        19
hight      35
name      Tom
weight      4
Name: a2, dtype: object <class 'pandas.core.series.Series'>
--------------------age  hight   name  weight
a1    9     20    Ada       8
a3   12     30  Black       5

备注:只获取一行,则拿到的是Series。

  • 例子3(iloc方法)

iloc方法和loc区别是iloc接受的必须是行索引和列索引的下标,在下面的例子中,我们演示一下loc方法的使用。

代码:

import pandas as pddata = {'name':['Ada', 'Tom','Black', 'Jack'],'age':[9, 19, 12, 15],'weight':[8, 4, 5, 6],'hight':[20, 35, 30, 33]}df = pd.DataFrame(data, index = ['a1', 'a2', 'a3', 'a4'])print(df.iloc[2])
print('-'*20)
print(df.iloc[[1, 3]])

结果:

age          12
hight        30
name      Black
weight        5
Name: a3, dtype: object
--------------------age  hight  name  weight
a2   19     35   Tom       4
a4   15     33  Jack       6

行添加

  • 例子

代码:

import pandas as pddf1 = pd.DataFrame([['Huang', 7], ['Bai', 8]],columns = ['name', 'age'])df2 = pd.DataFrame([['Bunny', 5], ['Tim', 9]],columns = ['name', 'age'])print(df1)
print('-'*15)
df = df1.append(df2)
print(df)
print('-'*15)
print(df.loc[0])

结果:

    name  age
0  Huang    7
1    Bai    8
---------------name  age
0  Huang    7
1    Bai    8
0  Bunny    5
1    Tim    9
---------------name  age
0  Huang    7
0  Bunny    5

由结果可知,进行行添加后,行标会出现重复的状况,如果按照行标进行行查询,则可能会找到多行数据。我们可以重建索引,解决索引重复问题。

行删除

使用索引标签从DataFrame中删除或者删除行。如果标签重复,则会删除多行。

  • 例子

代码:

import pandas as pddf1 = pd.DataFrame([['Huang', 7], ['Bai', 8]],columns = ['name', 'age'])df2 = pd.DataFrame([['Bunny', 5], ['Tim', 9]],columns = ['name', 'age'])df = df1.append(df2)
print(df)
print('-'*15)
#删除index为1的行
df = df.drop(1)
print(df)

结果:

    name  age
0  Huang    7
1    Bai    8
0  Bunny    5
1    Tim    9
---------------name  age
0  Huang    7
0  Bunny    5

修改DataFrame中的数据

更改DataFrame中的数据,原理是将要修改的这部分数据提取出来,重新赋值为新的数据.

  • 例子

代码:

import pandas as pddf = pd.DataFrame([['Huang', 7], ['Bai', 8],['Black', 9]],columns = ['name', 'age'])print(df)
print('-'*15)df['name'][2] = 'Tim'
print(df)

备注:df["Name"][2]是先拿到name列(Series类型),再拿到第3行。

结果:

    name  age
0  Huang    7
1    Bai    8
2  Black    9
---------------name  age
0  Huang    7
1    Bai    8
2    Tim    9

DataFrame常用属性

编号 属性或方法 描述
1 axes 返回 行/列 标签(index)列表。
2 dtype 返回对象的数据类型(dtype)。
3 empty 如果Series为空,则返回True
4 ndim 返回底层数据的维数,默认定义:1
5 size 返回基础数据中的元素数。
6 values 将系列作为ndarray返回。
7 head() 返回前n行。
8 tail() 返回最后n行。
  • 例子

代码:

import pandas as pddata = {'name':['Ada', 'Tom','Black', 'Jack'],'age':[9, 19, 12, 15],'weight':[8, 4, 5, 6],'hight':[20, 35, 30, 33]}df = pd.DataFrame(data, index = ['a1', 'a2', 'a3', 'a4'])print(df, '\n')
print(df.axes, '\n')
print(df['age'].dtype, '\n')
print(df.empty, '\n')
print(df.ndim, '\n')
print(df.size, '\n')
print(df.values, '\n')
print(df.head(3), '\n') # df的前三行
print(df.tail(3), '\n') # df的后三行

结果:

    age  hight   name  weight
a1    9     20    Ada       8
a2   19     35    Tom       4
a3   12     30  Black       5
a4   15     33   Jack       6 [Index(['a1', 'a2', 'a3', 'a4'], dtype='object'), Index(['age', 'hight', 'name', 'weight'], dtype='object')] int64 False 2 16 [[9 20 'Ada' 8][19 35 'Tom' 4][12 30 'Black' 5][15 33 'Jack' 6]] age  hight   name  weight
a1    9     20    Ada       8
a2   19     35    Tom       4
a3   12     30  Black       5 age  hight   name  weight
a2   19     35    Tom       4
a3   12     30  Black       5
a4   15     33   Jack       6
  • 例子2(describe)

代码1:

import pandas as pddata = {'name':['Ada', 'Tom','Black', 'Jack', 'Bai'],'age':[9, 19, 12, 15, 10],'weight':[8, 4, 5, 6, 7],'hight':[20, 35, 30, 33, 28]}df = pd.DataFrame(data, index = ['a1', 'a2', 'a3', 'a4', 'a5'])print(df.describe())

结果1:

             age     hight    weight
count   5.000000   5.00000  5.000000
mean   13.000000  29.20000  6.000000
std     4.062019   5.80517  1.581139
min     9.000000  20.00000  4.000000
25%    10.000000  28.00000  5.000000
50%    12.000000  30.00000  6.000000
75%    15.000000  33.00000  7.000000
max    19.000000  35.00000  8.000000

由结果可知,df.describe()将数值型数据的统计量计算出来了。

代码2:

print(df.describe(include = ['object']))

结果2:

        name
count      5
unique     5
top     Jack
freq       1

由结果可知,df.describe(include = [“object”])是对分类型(这里不是很确定,标记一下) 的数据进行描述性统计分析。

代码3:

print(df.describe(include = ['number']))

结果3:

             age     hight    weight
count   5.000000   5.00000  5.000000
mean   13.000000  29.20000  6.000000
std     4.062019   5.80517  1.581139
min     9.000000  20.00000  4.000000
25%    10.000000  28.00000  5.000000
50%    12.000000  30.00000  6.000000
75%    15.000000  33.00000  7.000000
max    19.000000  35.00000  8.000000

由结果可知df.describe(include = [“number”])是对数值型的数据进行描述性统计分析,上述结果与结果1相同。

代码4:

print(df.describe(include = ['number', 'object']))

结果4:

              age     hight name    weight
count    5.000000   5.00000    5  5.000000
unique        NaN       NaN    5       NaN
top           NaN       NaN  Bai       NaN
freq          NaN       NaN    1       NaN
mean    13.000000  29.20000  NaN  6.000000
std      4.062019   5.80517  NaN  1.581139
min      9.000000  20.00000  NaN  4.000000
25%     10.000000  28.00000  NaN  5.000000
50%     12.000000  30.00000  NaN  6.000000
75%     15.000000  33.00000  NaN  7.000000
max     19.000000  35.00000  NaN  8.000000

结果4基本上可以说,是结果2和结果3的堆叠。

pandas基础(part2)--DataFrame相关推荐

  1. Pandas基础复习-DataFrame

    数据类型-DataFrame DataFrame是由多个Series数据列组成的表格数据类型,每行Series值都增加了一个共用的索引 既有行索引,又有列索引 行索引,表明不同行,横向索引,叫inde ...

  2. dataframe两个表合并_Part25:Pandas基础(Series,DataFrame类的创建、索引、切片、算术方法)...

    一.为什么学习pandas numpy已经可以帮助我们进行数据的处理了,那么学习pandas的目的是什么呢? numpy能够帮助我们处理的是数值型的数据,当然在数据分析中除了数值型的数据还有好多其他类 ...

  3. 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍 一、pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主

    利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍 一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目 ...

  4. Pandas基础:文件读取与写入、Series和Dataframe、常用基本函数、排序

    文章目录 一.文件读取与写入 1.读取 (a)csv格式 (b)txt格式 (c)xls或xlsx格式 2. 写入 (a)csv格式 (b)xls或xlsx格式 二.基本数据结构 1.Series ( ...

  5. 【甘道夫】Pandas 基础知识总结

    欢迎转载,转载时请注明来源:https://blog.csdn.net/u010967382/article/details/89490502 1.简介 pandas包括3类核心数据结构: 一维:pa ...

  6. 快乐学习Pandas入门篇:Pandas基础

    Datawhale学习 作者:杨煜,Datawhale成员 寄语:本文对Pandas基础内容进行了梳理,从文件读取与写入.Series及DataFrame基本数据结构.常用基本函数及排序四个模块快速入 ...

  7. pandas object转float_数据分析篇 | Pandas基础用法6【完结篇】

    这是最后一篇,至此Pandas系列终于连载完了,有需要的也可以看看前面6篇,尽请收藏. 数据分析篇 | Pandas 概览 数据分析篇 | Pandas基础用法1数据分析篇 | Pandas基础用法2 ...

  8. Numpy与Pandas基础

    Numpy与Pandas基础 Cyczz 计算机小白 ​关注他 1 人赞同了该文章 本文包括: 一维数据分析 二维数据分析 一.一维数组 Numpy的一维数组(array) 创建一个一维数组,参数传入 ...

  9. Pandas简明教程:二、Pandas基本数据结构-DataFrame与Series

    文章目录 1.什么是表格? 2.DataFrame类型 3.Series类型 本系列教程教程完整目录: 1.什么是表格? 月份 姓名 性别 应发工资 实发工资 职位 0 1 张三 男 2000 150 ...

最新文章

  1. jvm性能调优 - 14JVM的老年代垃圾回收器CMS原理
  2. aix安装bff_AIX的yum安装
  3. 你了解VLSM多少(1)
  4. JS不同类型之间运算与转换
  5. python读取tiff数据_opencv-python读取tiff影像,并展示
  6. 财务管理(Finance Management)
  7. 多个集合合并成没有交集的集合-实现
  8. LeetCode-----重建二叉树
  9. linux grep,egrep,正则表达式
  10. CMakeLists.txt 介绍
  11. 斐讯k2华硕虚拟服务器,斐讯K2路由器三步刷入华硕固件
  12. 整理了20个数据可视化大屏模板,拿来即用
  13. 如何通过IP共享文件
  14. HyperLogLog算法及原理
  15. android killer 连接模拟器,AndroidKiller怎么连接夜游神手机模拟器的方法教程
  16. 全球最好听、最值得听的100首英文歌曲。(每首都有下载地址)
  17. iOS 之归档解档(nskeyarchieve)
  18. Linux之日志服务及管理
  19. authinfo.php,微信刷脸支付getWxpayFaceAuthInfo.php一直返回“无效的RawData数据”?
  20. 大连理工版小学计算机教案,大连理工版小学信息技术教案

热门文章

  1. 深度学习(四十五)——Stack GAN, GAN Ensemble, Pix2Pix, CycleGAN
  2. oracle数据库IMP-00010错误解决
  3. 精益质量管理中执行防错管理的八大要点
  4. except的实践经验
  5. 初识linux之给我一个家
  6. ReactiveCocoa 更优雅的编程(信号探秘)
  7. Linux部署web程序
  8. FFT快速傅立叶变换
  9. 关于asp.net中partial,asp.net编译笔记
  10. ASP+MSSQL注入工具 web版 beta 3 final release