pandas

  • 前言
  • (一)、`Series`创建一维数组
  • (二)、二维数组表格`DataFrame`的创建与索引的修改
    • 一、`DataFrame`的创建
      • 1、通过列表来创建
      • 2、通过字典创建
      • 3、通过二维数组创建
    • `DataFrame`索引的修改
      • 重命名索引
  • (三)、文件的读取和写入
    • 文件的读取
    • 文件的写入
  • (四)、数据的选取和处理
    • 1、数据的选取
      • 按列选取数据
      • 按行选取数据
      • 按区块选取数据
    • 2、数据的筛选
    • 3、数据的排序
      • 按列排序`sort_values()函数`
      • 按行进行排序`sort_index()函数`
    • 4、数据的运算
    • 5、数据的删除
      • 删除列
      • 删除行
    • 6、数据表的拼接
      • `merge()`函数
    • 7、`concat()`函数
      • 行方向拼接(纵向拼接)
      • 横向拼接

前言

pandas模块是基于NumPy模块的一个开源Python模块,广泛应用于完成数据快速分析、数据清洗和准备等工作,它的名字来源于“panel data”(面板数据)。

pandas模块提供了非常直观的数据结构及强大的数据管理和数据处理功能,某种程度上可以把pandas模块看成Python版的Excel。如果是利用Anaconda安装的Python,则自带pandas模块,无须单独安装。与NumPy模块相比,pandas模块更擅长处理二维数据,其主要有Series和DataFrame
两种数据结构。

(一)、Series创建一维数组

import pandas as pds = pd.Series(['丁一','王二','张三'])
print(s)

运行结果

0    丁一
1    王二
2    张三
dtype: object

看到s是一个一维数组结构,并且每个元素都有一个可以用来定位的行索引,
如s[1]可以定位到王二。

(二)、二维数组表格DataFrame的创建与索引的修改

一、DataFrame的创建

DataFrame 可以通过列表、字典或二维数组来创建。

1、通过列表来创建

利用pandas模块中的DataFrame()函数来创建

import pandas as pda = pd.DataFrame([[1,2],[3,4],[5,6]])
print(a)

运行结果

   0  1
0  1  2
1  3  4
2  5  6

通过与NumPy模块创建的二维数组比较可以发现,DataFrame更像Excel中的二维表格,它也有行索引和列索引。需要注意的是,这里的索引序号是从0开始的。

我们还可以在创建DataFrame时自定义列索引和行索引,演示代码如下:

import pandas as pda = pd.DataFrame([[1,2],[3,4],[5,6]],columns=['date','score'],index=['A','B','C'])
print(a)

运行结果

   date  score
A     1      2
B     3      4
C     5      6

用列表来创建还有另一种方式,演示代码如下

import pandas as pda = pd.DataFrame()
date = [1,3,5]
score = [2,4,6]
a['date'] = date
a['score'] = score
print(a)

运行结果

   date  score
0     1      2
1     3      4
2     5      6

2、通过字典创建

默认以字典的键名作为列索引,演示代码如下:

import pandas as pda = pd.DataFrame({'a':[1,2,3],'b':[4,5,6]},index=['x','y','z'])
print(a)

运行结果

   a  b
x  1  4
y  2  5
z  3  6

如果想以字典的键名作为行索引,可以用 from_dict()函数将字典转换成DataFrame,同时。设置参数orient的值为’index’。演示代码如下:

import pandas as pda = pd.DataFrame.from_dict({'a':[1,2,3],'b':[4,5,6]},orient='index')
print(a)

参数orient用于指定以字典的键名作为列索引还是行索引,默认值为 'columns 即以字典的键名作为列索引,如果设置成Index,则表示以字典的键名作为行索引。运行结果如下:

   0  1  2
a  1  2  3
b  4  5  6

3、通过二维数组创建

import pandas as pd
import numpy as npa = np.arange(12).reshape(3,4)
b = pd.DataFrame(a,index=[1,2,3],columns=['A','B','C','D'])
print(b)

运行结果

   A  B   C   D
1  0  1   2   3
2  4  5   6   7
3  8  9  10  11

DataFrame索引的修改

重命名索引

import pandas as pd
import numpy as npa = np.arange(12).reshape(3,4)
b = pd.DataFrame(a,index=[1,2,3],columns=['A','B','C','D'])
b = b.rename(index={1:'万科',2:'阿里',3:'百度'},columns ={'A':1,'B':2,'C':3,'D':4})
print(b)

运行结果

    1  2   3   4
万科  0  1   2   3
阿里  4  5   6   7
百度  8  9  10  11

需要注意的是,rename()函数会用新索引名创建一个新的DataFrame,并不会改变b的内容.所以这里将重命名索引之后得到的新DataFrame赋给b,以便在后续代码中使用。也可以通过设置参数inplace为True来一步到位地完成索引的重命名,代码如下:

b.rename(index={1:'万科',2:'阿里',3:'百度'},columns ={'A':1,'B':2,'C':3,'D':4},inplace = True)

(三)、文件的读取和写入

文件的读取

以下代码读取名为"data.xlsx"的工作簿中的数据。

import pandas as pd
data = pd.read_excel('data.xlsx')

第2行代码中为read excel(以函数设置的文件路径参数是相对路径,即代码文件所在的路径,也可以设置成绝对路径。read-exce!(3蚤数还有其他参数,这里简单介绍几个常用参数:

  • sheetname用于指定工作表,可以是工作表名称,也可以是数字(默认为0,即第1个工作表)。
  • encoding用于指定文件的编码方式,一般设置为UTF-8或GBK编码,以避免中文乱码。
  • indexLcol用于设置索引列。

例如,要以 UTF−8 编码方式读取工作簿“data xlvx”的第1个工作表,则可将第2行代码修改为如下代码:

data = pd.read_excel('data.xlsx',sheetname=0,encoding='utf-8')

文件的写入

import pandas as pd
import numpy as npa = np.arange(12).reshape(3,4)
b = pd.DataFrame(a,index=[1,2,3],columns=['A','B','C','D'])
b.to_excel('data.xlsx')

如果无法运行:即可安装openpyxl

运行结果

上图中,行索引信息被存储在工作表的第1列中,如果想在写入数据时不保留行索引信息,可以设置to _ excel()函数的参数。该函数的常用参数有:

  • sheetname用于指定工作表名称。
  • index用于指定是否写入行索引信息,默认为True,即将行索引信息存储在输出文件的第1列:若设置为False,则忽略行索引信息。
  • columns用于指定要写入的列。
  • encoding用于指定编码方式。

例如,要将data中的A列数据写入工作簿并忽略行索引信息,可编写如下代码:

(四)、数据的选取和处理

先创建一个数据

import pandas as pd
import numpy as np
import  xlwings as xwdata = pd.DataFrame(np.arange(1,10).reshape(3,3),index=['r1','r2','r3'],columns=['c1','c2','c3'])

1、数据的选取

按列选取数据

选取单列

a = data['c1']
print(a)

运行结果

r1    1
r2    4
r3    7
Name: c1, dtype: int32

看到打印的数据没有列索引,可以使用如下代码

a = data[['c1']]
print(a)

选取多列

c = data[['c1','c2']]

按行选取数据

可以根据行序号来选取

#选取2~3行的数据,注意序号从0开始,左闭右开
a = data[1:3]
print(a)

运行结果

    c1  c2  c3
r2   4   5   6
r3   7   8   9

不过按上面的方式可能会产生混乱,可以使用iloc方法

#选取2~3行的数据,注意序号从0开始,左闭右开
a = data.iloc[1:3]
print(a)

如果要选取单行就只能用iloc方法,如选取倒数第一行

a = data.iloc[-1]
print(a)

还可以使用loc方法根据行的名称来选取数据

a = data.loc[['r2','r3']]
print(a)

运行结果

    c1  c2  c3
r2   4   5   6
r3   7   8   9

如果行数多可以使用head()函数来选取前几行数据

# 前一行
a = data.head(1)
print(a)

按区块选取数据

  1. 选取某几行的某几列数据
# c1、c3列的前两行
a = data[['c1','c3']][0:2]
#a = data[0:2][['c1','c3']]
print(a)
  1. 通常先用ilon方法选取行,再选取列
a = data.iloc[0:2][['c1','c3']]
print(a)

3.也可以使用ilonlon同时选取行和列

a = data.iloc[0:2,[0,2]]
print(a)
#或者
a = data.loc[['r1','r2'],['c1','c3']]
print(a)

2、数据的筛选

通过在中括号里设定条件可以过滤行。
如,筛选c1列大于1的行

a = data[data['c1']>1]
print(a)

运行结果

    c1  c2  c3
r2   4   5   6
r3   7   8   9

如果有多个筛选条件,可以用‘&’或‘|’连接起来。注意用小括号将条件括起来

a = data[(data['c1']>1)&(data['c2'] == 5)]
print(a)

运行结果

    c1  c2  c3
r2   4   5   6

3、数据的排序

按列排序sort_values()函数

例如,将data 按c2列进行降序排列。

a = data.sort_values(by='c2',ascending = False)
print(a)

运行结果

    c1  c2  c3
r3   7   8   9
r2   4   5   6
r1   1   2   3

参数by用于指定那一列来排序;参数ascending (上升的意思)默认值为True,表示升序排序,设置为False,表示降序排列。

按行进行排序sort_index()函数

在上排序的基础上,加上

a = a.sort_index()
print(a)

运行结果

    c1  c2  c3
r1   1   2   3
r2   4   5   6
r3   7   8   9

4、数据的运算

通过数据运算可以基于已有的列生成新的一列

data = pd.DataFrame(np.arange(1,10).reshape(3,3),index=['r1','r2','r3'],columns=['c1','c2','c3'])
data['c4'] = data['c2'] + data['c3']
print(data)

运行结果

    c1  c2  c3  c4
r1   1   2   3   5
r2   4   5   6  11
r3   7   8   9  17

5、数据的删除

使用drop()函数,该函数有以下参数

  • index:用于指定删除的行
  • columns:用于指定删除的列
  • inplace:默认值为False,表示不改变原来的,而是返回一个执行删除操作后返回的新表。

删除列

a = data.drop(columns = 'c1')
print(a)# 删除多列
a = data.drop(columns = ['c1','c3'])
print(a)

删除行

# 删除多行
a = data.drop(index = ['r1','r3'])
print(a)

注意:给出行索引时要输入行索引名称而不是序号,除非行索引名就是数字

6、数据表的拼接

merge()函数

merge()函数可以根据一个或多个同名的列将不同数据表中的行连接起来

import pandas as pddf1 = pd.DataFrame({'公司':['恒诚','创越','快学'],'分数':[90,95,85]})
df2 = pd.DataFrame({'公司':['恒诚','创越','京西'],'股价':[20,180,30]})df3 = pd.merge(df1,df2)
print(df3)

运行结果

   公司  分数   股价
0  恒诚  90   20
1  创越  95  180

可以看到,merge(函数直接根据相同的列名(“公司”列)对两个数据表进行了合并,而且默认选取的是两个表共有的列内容(恒盛’、'创锐)。如果同名的列不止一个,可以通过设置参数on指定按照哪一列进行合并,代码如下:

df3 = pd.merge(df1,df2,on ='公司')

默认的合并方式其实是取交集(inner连接》,即选取两个表共有的内容。如果想取并集(outer)连接),即选取两个表所有的内容,可以设置参数how,代码如下:

df3 = pd.merge(df1,df2,how = 'outer')
   公司    分数     股价
0  恒诚  90.0   20.0
1  创越  95.0  180.0
2  快学  85.0    NaN
3  京西   NaN   30.0

如果只要左边的全部内容,how参数为left,右边则是 right

想按行索引合并

df3 = pd.merge(df1,df2,left_index= True,right_index=True)
print(df3)

运行结果

  公司_x  分数 公司_y   股价
0   恒诚  90   恒诚   20
1   创越  95   创越  180
2   快学  85   京西   30

7、concat()函数

concat()函数使用全连接(UNIONALL)方式完成拼接,它不需要对齐,而是直接进行合并,即不需要两个表有相同的列或索引,只是把数据整合到一起。因此,该函数没有参数how和0n。而是用参数axis指定连接的轴向。

行方向拼接(纵向拼接)

df3 = pd.concat([df1,df2])
# df3 = pd.concat([df1,df2],axis = 0)
print(df3)

运行结果

   公司    分数     股价
0  恒诚  90.0    NaN
1  创越  95.0    NaN
2  快学  85.0    NaN
0  恒诚   NaN   20.0
1  创越   NaN  180.0
2  京西   NaN   30.0

我们发现索引还是原来的,我们可以设置ignore_index为True来忽略原有的索引。

df3 = pd.concat([df1,df2],ignore_index = True)

横向拼接

df3 = pd.concat([df1,df2],axis = 1)

数据导入和整理模块---pandas相关推荐

  1. 数据导入与预处理-拓展-pandas时间数据处理01

    数据导入与预处理-拓展-pandas时间数据处理01 Pandas时序数据系列博客 Pandas时间序列数据处理 1.好用的Python库 2.Pandas历史 3.时序数据处理 3.1 时序中的基本 ...

  2. 处理Excel的Python算法_4.1_:数组导入和整理模块——Panda(快速入门)

    索引 官方网站 QuickStart Pandas概览 数据结构 大小可变与数据复制 快速入门 生成对象 查看数据 选择 缺失值 运算 合并(Merge) 分组(Grouping) 重塑(Reshap ...

  3. csv导入pgsql不成功_数据科学 | pandas数据导入与导出

    ↑↑↑↑↑点击上方蓝色字关注我们! 『运筹OR帷幄』原创 作者:杨士锦 周岩 书生 编者按 当我们开始着手做一个数据分析项目时,选择和导入数据集是第一个步骤,而导出数据虽然非必需,但有时候我们也需要保 ...

  4. pandas处理丢失数据与数据导入导出

    3.4pandas处理丢失数据 头文件: import numpy as np import pandas as pd 丢弃数据部分: dates = pd.date_range('20130101' ...

  5. pythonmysql数据分析_Python操作Mysql数据库入门——数据导入pandas(数据分析准备)...

    原标题:Python操作Mysql数据库入门--数据导入pandas(数据分析准备) 欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习.问答.求 ...

  6. 将excel表格数据整理为数据导入文件,再使用Aqua Data Studio导入数据库的某张表中

    先提前说一下,我使用的数据库开发工具是Aqua Data Studio,数据库系统是Sybase 一.整理数据库导入文件 由于不知道数据导入文件的格式,所以先导出一份数据文件看看格式.鼠标选中要导入数 ...

  7. python之pandas数据导入

    pandas数据导入 学习python最好的学习方法就是带着自己的工作需求或者目标去学习.pandas库不多介绍,先放一些最基础的内容帮助学习. pandas导入/导出数据是非常方便的,可以快速的导入 ...

  8. [整理]MySql批量数据导入Load data infile解决方案

    有时候我们需要将大量数据批量写入数据库,直接使用程序语言和Sql写入往往很耗时间,其中有一种方案就是使用MySql Load data infile导入文件的形式导入数据,这样可大大缩短数据导入时间. ...

  9. Python小白的数学建模课-02.数据导入

    数据导入是所有数模编程的第一步,比你想象的更重要. 先要学会一种未必最佳,但是通用.安全.简单.好学的方法. 『Python小白的数学建模课 @ Youcans』 带你从数模小白成为国赛达人. 1. ...

最新文章

  1. 资料分享:送你一本《机器学习实战》电子书!
  2. Grid R-CNN解读:商汤最新目标检测算法,定位精度超越Faster R-CNN
  3. 迅雷(XUNLEI)的工作原理揭密(续)---为何遭封杀及如何应对?
  4. Rails Migration Data Model栏位修改及数据类型介绍
  5. silverlight(一.安装和新建项目)
  6. windows下mysql+apache+php配置
  7. 如何在 16 英寸 MacBook Pro 内置或独立显示器上更改刷新率?
  8. 京瓷m1025维修模式进不去_多个品牌复印机进入维修模式步骤大全
  9. Java毕业设计-学生选课管理系统
  10. apk android 应用qq表情,一句代码让你的安卓APP支持emoji表情
  11. 成都有哪些计算机科学与技术专业就业前景,成都市计算机学校计算机科学与技术专业就业去向...
  12. xmapp启动数据库问题记录 Access denied for user ‘me‘@‘localhost‘ (using password: NO)
  13. android 126邮箱格式,如何在Android系统邮件应用程序中添加帐户(默认POP3)
  14. 玉米社:SEM竞价搜索推广移动优先还是PC优先,怎么设置?
  15. 汽车智造(一)| 移动机器人(AGV AMR)如何赋能汽车行业制造升级
  16. 如何将免费的WordPress音乐播放器添加到您的网站
  17. react 使用 svg_在React本机中使用svg构建钟面
  18. 【UML】— 用例图
  19. C+实现RSA加密解密
  20. 小试牛刀:用python写欢乐斗牛

热门文章

  1. 计算机科学AP考试,AP计算机科学A和计算机原理有什么区别
  2. 为什么要把CV_8UC3(Vec3b)无符号整型转换成CV_32F(Vec3F)32位浮点数据类型?(在高精度下处理)
  3. VS里的VC++属性和C/C++属性有什么区别?
  4. 【中级软考】MTBF是什么?(平均故障间隔时间,Mean Time Between Failure,是衡量一个产品的可靠性指标,单位为小时)
  5. 使用websockets,后台实时发数据,前台实时接受数据,并集成到Django
  6. All are Same 思维,gcd
  7. SpringMVC学习——对于SpringMVC的整体认识
  8. ext时间控件Ext.ux.form.DateTimeField和Ext.form.DateField的用法比较
  9. Spring Boot 使用Actuator监控应用
  10. JVM 垃圾回收算法 -可达性分析算法!!!高频面试!!!