很多人都分不清Numpy,Scipy,pandas三个库的区别。

在这里简单分别一下:

  • NumPy:数学计算库,以矩阵为基础的数学计算模块,包括基本的四则运行,方程式以及其他方面的计算什么的,纯数学;
  • SciPy :科学计算库,有一些高阶抽象和物理模型,在NumPy基础上,封装了一层,没有那么纯数学,提供方法直接计算结果;
  • 比如:

    • 做个傅立叶变换,这是纯数学的,用Numpy;
    • 做个滤波器,这属于信号处理模型了,用Scipy。
  • Pandas:提供名为DataFrame的数据结构,比较契合统计分析中的表结构,做数据分析用的,主要是做表格数据呈现。

目前来说,随着Pandas更新,Numpy大部分功能已经直接和Pandas融合了。

如果想了解Numpy的话,可点击阅读Python之Numpy的基础及进阶函数(图文)

但如果你不是纯数学专业,而且想做数据分析的话,尝试着从 Pandas 入手比较好。

接下来讲Pandas。

1数据结构

  • Series:一维数组,与Numpy中的一维array类似。
  • Time- Series:以时间为索引的Series。
  • DataFrame:二维的表格型数据结构。可以将DataFrame理解为Series的容器。
  • Panel :三维的数组,可以理解为DataFrame的容器。
# 导入别名
import pandas as pd
pd.Series([1,2,3,4])

2数据读取

2.1 csv文件读取

read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer', names=None, index_col=None, usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, iterator=False, chunksize=None, compression='infer', thousands=None, decimal=b'.', lineterminator=None, quotechar='"', quoting=0, escapechar=None, comment=None, encoding=None, dialect=None, tupleize_cols=False, error_bad_lines=True, warn_bad_lines=True, skipfooter=0, skip_footer=0, doublequote=True, delim_whitespace=False, as_recarray=False, compact_ints=False, use_unsigned=False, low_memory=True, buffer_lines=None, memory_map=False, float_precision=None)

  • filepath_or_buffer:文件路径,建议使用相对路径
  • header: 默认自动识别首行为列名(特征名),在数据没有列名的情况下 header = none, 还可以设置为其他行,例如 header = 5 表示索引位置为5的行作为起始列名
  • sep: 表示csv文件的分隔符,默认为','
  • names: 表示设置的字段名,默认为'infer'
  • index_col:表示作为索引的列,默认为0-行数的等差数列。
  • engine:表示解析引擎,可以为'c'或者'python'
  • encoding:表示文件的编码,默认为'utf-8'。
  • nrows:表示读取的行数,默认为全部读取
# 读取csv,参数可删
data = pd.read_csv('./data/test.csv',sep = ',',header = 'infer',names = range(5,18),index_col = [0,2],engine = 'python',encoding = 'gbk',nrows = 100)
# 读取csv,参数可删
data = pd.read_table('./data/test.csv',sep = ',',header = 'infer',names = range(5,18),index_col = [0,2],engine = 'python',encoding = 'gbk',nrows = 100)

2.2Excel 数据读取

read_excel(io, sheetname=0, header=0, skiprows=None, skip_footer=0, index_col=None, names=None, parse_cols=None, parse_dates=False, date_parser=None, na_values=None, thousands=None, convert_float=True, has_index_names=None, converters=None, dtype=None, true_values=None, false_values=None, engine=None, squeeze=False, **kwds)

  • io:文件路径+全称,无默认
  • sheetname:工作簿的名字,默认为0
  • header: 默认自动识别首行为列名(特征名),在数据没有列名的情况下 header = none, 还可以设置为其他行,例如 header = 5 表示索引位置为5的行作为起始列名
  • names: 表示设置的字段名,默认为'infer'
  • index_col:表示作为索引的列,默认为0-行数的等差数列
  • engine:表示解析引擎,可以为'c'或者'python'
data = pd.read_excel('./data/test.xls',sheetname='原始数据',header = 0,index_col = [5,6])

2.3数据库数据读取

  1. read_sql_query(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, chunksize=None)

    • sql:表示抽取数据的SQL语句,例如'select * from 表名'
    • con:表示数据库连接的名称
    • index_col:表示作为索引的列,默认为0-行数的等差数列
  2. read_sql_table(table_name, con, schema=None, index_col=None, coerce_float=True, parse_dates=None, columns=None, chunksize=None)
    • table_name:表示抽取数据的表名
    • con:表示数据库连接的名称
    • index_col:表示作为索引的列,默认为0-行数的等差数列
    • columns:数据库数据读取后的列名。
  3. read_sql(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, columns=None, chunksize=None)
    • sql:表示抽取数据的表名或者抽取数据的SQL语句,例如'select * from 表名'
    • con:表示数据库连接的名称
    • index_col:表示作为索引的列,默认为0-行数的等差数列
    • columns:数据库数据读取后的列名。

  建议:用前两个

# 读取数据库
from sqlalchemy import create_engine
conn = create_engine('mysql+pymysql://root:root@127.0.0.1/test?charset=utf8', encoding='utf-8', echo=True)
# data1 = pd.read_sql_query('select * from data', con=conn)
# print(data1.head()) data2 = pd.read_sql_table('data', con=conn)
print(data2.tail())
print(data2['X'][1])

  数据库连接字符串各参数说明

  'mysql+pymysql://root:root@127.0.0.1/test?charset=utf8'

  连接器://用户名:密码@数据库所在IP/访问的数据库名称?字符集

3数据写出

3.1将数据写出为csv

DataFrame.to_csv(path_or_buf=None, sep=',', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, mode='w', encoding=None, compression=None, quoting=None, quotechar='"', line_terminator='\n', chunksize=None, tupleize_cols=False, date_format=None, doublequote=True, escapechar=None, decimal='.')

  • path_or_buf:数据存储路径,含文件全名例如'./data.csv'
  • sep:表示数据存储时使用的分隔符
  • header:是否导出列名,True导出,False不导出
  • index: 是否导出索引,True导出,False不导出
  • mode:数据导出模式,'w'为写
  • encoding:数据导出的编码
import pandas as pd
data.to_csv('data.csv',index = False)

3.2将数据写出为excel

DataFrame.to_excel(excel_writer, sheet_name='Sheet1', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None, inf_rep='inf', verbose=True, freeze_panes=None)

  • excel_writer:数据存储路径,含文件全名例如'./data.xlsx'
  • sheet_name:表示数据存储的工作簿名称
  • header:是否导出列名,True导出,False不导出
  • index: 是否导出索引,True导出,False不导出
  • encoding:数据导出的编码
data.to_excel('data.xlsx',index=False)

3.3将数据写入数据库

DataFrame.to_sql(name, con, flavor=None, schema=None, if_exists='fail', index=True, index_label=None, chunksize=None, dtype=None)

  • name:数据存储表名
  • con:表示数据连接
  • if_exists:判断是否已经存在该表,'fail'表示存在就报错;'replace'表示存在就覆盖;'append'表示在尾部追加
  • index: 是否导出索引,True导出,False不导出
from sqlalchemy import create_engine
conn =create_engine('mysql+pymysql://root:root@127.0.0.1/data?charset=utf8', encoding='utf-8', echo=True)
data.to_sql('data',con = conn)

4数据处理

4.1数据查看

# 查看前5行,5为数目,不是索引,默认为5
data.head()
# 查看最后6行,6为数目,不是索引,默认为5
data.tail(6)
# 查看数据的形状
data.shape
# 查看数据的列数,0为行1位列
data.shape[1]
# 查看所有的列名
data.columns
# 查看索引
data.index
# 查看每一列数据的类型
data.dtypes
# 查看数据的维度
data.ndim
## 查看数据基本情况
data.describe()
'''
count:非空值的数目
mean:数值型数据的均值
std:数值型数据的标准差
min:数值型数据的最小值
25%:数值型数据的下四分位数
50%:数值型数据的中位数
75%:数值型数据的上四分位数
max:数值型数据的最大值
'''

4.2数据索引

# 取出单独某一列
X = data['X']
# 取出多列
XY = data[['X','Y']]
# 取出某列的某一行
data['X'][1]
# 取出某列的某几行
data['X'][:10]
# 取出某几列的某几行
data[['X','Y']][:10]

# loc方法索引
'''
DataFrame.loc[行名,列名]
'''
# 取出某几列的某一行
data.loc[1,['X','月份']]
# 取出某几列的某几行(连续)
data.loc[1:5,['X','月份']]
# 取出某几列的某几行(连续)
data.loc[[1,3,5],['X','月份']]
# 取出 x ,FFMC ,DC的0-20行所有索引名称为偶数的数据
data.loc[range(0,21,2),['X','FFMC','DC']]

# iloc方法索引
'''
DataFrame.iloc[行位置,列位置]
'''
# 取出某几列的某一行
data.iloc[1,[1,4]]
# 取出列位置为偶数,行位置为0-20的偶数的数据
data.iloc[0:21:2,0:data.shape[1]:2]

# ix方法索引
'''
DataFrame.ix[行位置/行名,列位置/列名]
'''
## 取出某几列的某一行
data.ix[1:4,[1,4]]
data.ix[1:4,1:4]

loc,iloc,ix的区别

  1. loc使用名称索引,闭区间
  2. iloc使用位置索引,前闭后开区间
  3. ix使用名称或位置索引,且优先识别名称,其区间根据名称/位置来改变

  综合上述所言,不建议使用ix,容易发生混淆的情况,并且运行效率低于loc和iloc,pandas考虑在后期会移除这一索引方法

4.3数据修改

# 修改列名
list1 = list(data.columns)
list1[0] = '第一列'
data.columns = list1 data['新增列'] = True data.loc['新增一行',:] = True data.drop('新增列',axis=1,inplace=True) data.drop('新增一行',axis=0,inplace=True)

  

import pandas as pd
data = pd.read_excel('./data/test.xls') # 时间类型数据转换
data['发生时间'] = pd.to_datetime(data['发生时间'],format='%Y%m%d%H%M%S') # 提取day
data.loc[1,'发生时间'].day
# 提取日期信息新建一列
data['日期'] = [i.day for i in data['发生时间']] year_data = [i.is_leap_year for i in data['发生时间']]

4.4分组聚合

4.4.1分组

  

# 分组
group1 = data.groupby('性别')
group2 = data.groupby(['入职时间','性别']) # 查看有多少组
group1.size()

笔记:

  用groupby方法分组后的结果并不能直接查看,而是被存在内存中,输出的是内存地址。实际上分组后的数据对 象GroupBy类似Series与DataFrame,是pandas提供的一种对象。

4.4.2Groupby对象常见方法

4.4.3Grouped对象的agg方法

  Grouped.agg(函数或包含了字段名和函数的字典)

# 第一种情况
group[['年龄','工资']].agg(min) # 对不同的列进行不同的聚合操作
group.agg({'年龄':max,'工资':sum}) # 上述过程中使用的函数均为系统math库所带的函数,若需要使用pandas的函数则需要做如下操作
group.agg({'年龄':lambda x:x.max(),'工资':lambda x:x.sum()})

4.4.4Grouped对象的apply聚合方法

  Grouped.apply(函数操作)

  只能对所有列执行同一种操作

group.apply(lambda x:x.max())

4.4.5Grouped对象的transform方法

  grouped.transform(函数操作)

  transform操作时的对象不再是每一组,而是每一个元素

# 每一空添加字符
group['年龄'].transform(lambda x: x.astype(str)+'岁').head() # 组内标准化
group1['工资'].transform(lambda x:(x.mean()-x.min())/(x.max()-x.min())).head()

Python之Pandas知识点的更多相关文章

  1. Python数据分析--Pandas知识点(三)

    本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘. Python数据分析--Pandas知识点(一) Python数据分析--Pandas知识点(二) 下面将是在知识点一, ...

  2. Python数据分析--Pandas知识点(二)

    本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘. Python数据分析--Pandas知识点(一) 下面将是在知识点一的基础上继续总结. 13. 简单计算 新建一个数据表 ...

  3. Python数据分析--Pandas知识点(一)

    本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘 1. 重复值的处理 利用drop_duplicates()函数删除数据表中重复多余的记录, 比如删除重复多余的ID. im ...

  4. 基于 Python 和 Pandas 的数据分析(2) --- Pandas 基础

    在这个用 Python 和 Pandas 实现数据分析的教程中, 我们将明确一些 Pandas 基础知识. 加载到 Pandas Dataframe 的数据形式可以很多, 但是通常需要能形成行和列的数 ...

  5. Python利用pandas处理Excel数据的应用

    Python利用pandas处理Excel数据的应用   最近迷上了高效处理数据的pandas,其实这个是用来做数据分析的,如果你是做大数据分析和测试的,那么这个是非常的有用的!!但是其实我们平时在做 ...

  6. python遇到的知识点

    python遇到的知识点,记录一下.方便学习. 文件相关操作 查了资料,关于open()的mode参数: 'r':读 'w':写 'a':追加 'r+' == r+w(可读可写,文件若不存在就报错(I ...

  7. 基于 Python 和 Pandas 的数据分析(4) --- 建立数据集

    这一节我想对使用 Python 和 Pandas 的数据分析做一些扩展. 假设我们是亿万富翁, 我们会想要多元化地进行投资, 比如股票, 分红, 金融市场等, 那么现在我们要聚焦房地产市场, 做一些这 ...

  8. 基于 Python 和 Pandas 的数据分析(1)

    基于 Python 和 Pandas 的数据分析(1) Pandas 是 Python 的一个模块(module), 我们将用 Python 完成接下来的数据分析的学习. Pandas 模块是一个高性 ...

  9. python安装pandas和lxml

    一.安装python 二.安装pip 三.安装mysql-connector(window版):下载mysql-connector-python-2.1.3,解压后进入目录,命令安装:pip inst ...

随机推荐

  1. Choose GitLab for your next open source project

    原文:https://b.agilob.net/choose-gitlab-for-your-next-project/ GitLab.com is a competitor of GIthub. I ...

  2. Spring Boot + Redis

    启动redis docker run --name redisServer -P -d redis redis自带客户端,启动客户端 docker run -it --link redisServer ...

  3. 查看 postgresql 数据库编码,以及修改数据库编码

    查看数据表编码: \encoding 修改数据库编码: update pg_database set encoding = pg_char_to_encoding('UTF8') where datn ...

  4. CentOS7 下编译安装 Samba,什么是 SMB/CIFS 协议

    目录 一.关于 Samba 1. SMB 2. Samba 二.yum 安装 Samba 1. 安装 Samba 2. 查看版本 3. 查看配置文件 4. 启动服务 5. 本地客户端验证 6. Win ...

  5. Java NIO系列教程(十二) Java NIO与IO

    当学习了Java NIO和IO的API后,一个问题马上涌入脑海: 我应该何时使用IO,何时使用NIO呢?在本文中,我会尽量清晰地解析Java NIO和IO的差异.它们的使用场景,以及它们如何影响您的代 ...

  6. .5-浅析webpack源码之入口函数

    从convert-argv出来后,目前进度在这: yargs.parse(process.argv.slice(2), (err, argv, output) => { // ... // 从这 ...

  7. 超简单MVC应用程序播放WMV视频

    本篇博文,介绍给大家的是,在MVC应用程序中,播放Windows media video(.wmv) 视频文件. Insus.NET的实现方法,把media player组件,嵌入MVC的控制器的Co ...

  8. VB.NET工作记录

    1.字符串移除最后一个字符 s = s.Remove(s.Length - 1, 1) 2.日期格式 常用:yyyy-MM-dd HH:mm:ss 毫秒用fff 字符 说明 (:) 时间分隔符.在某些 ...

  9. jQuery.Form.js 异步提交表单使用总结

    jQuery.Form.js 是一个用于使用jQuery异步提交表单的插件,它使用方法简单,支持同步和异步两种方式提交. 第一步:引入jQuery与jQuery.Form.js <script ...

  10. arcgis按要求删除点位

    第一篇博客 嘻嘻 上图 1