很多人都分不清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. vue数组检测更新问题

    由于 JavaScript 的限制, Vue 不能检测以下变动的数组: 当你利用索引直接设置一个项时,例如: vm.items[indexOfItem] = newValue 当你修改数组的长度时,例 ...

  2. 浅尝Vue.js组件(二)

    本篇目录: 插槽(Slot) 插槽内容 作用域 具名插槽 作用域插槽 独占默认插槽的缩写语法 解构插槽Prop 使用场景举例 动态插槽名 具名插槽缩写 动态组件&keep-alive 异步组件 ...

  3. mac 比较两个文件

    比较两个文件,输出两个文件都有的行,可以 1.使用comm命令 如下例: ------------------->$ cat 1s1.txt line line line line line l ...

  4. win10 磁盘占用高--- 禁用用户改善反馈 CompatTelRunner.exe

    1. 2.右键点开[这台电脑],点[管理],点[服务和应用程序]点[服务],在右边框里把[superfetch] [windows search][HomeGroupListener] [HomeGr ...

  5. GCD之Source

    参考:http://blog.csdn.net/lengshengren/article/details/12905811

  6. 分布式理论(八)—— Consistent Hash(一致性哈希算法)

    前言 在分布式系统中,常常需要使用缓存,而且通常是集群,访问缓存和添加缓存都需要一个 hash 算法来寻找到合适的 Cache 节点.但,通常不是用取余hash,而是使用我们今天的主角-- 一致性 h ...

  7. [转]centos7 移动mysql5.7.19 数据存储位置

    本文转自:https://blog.csdn.net/chpllp/article/details/78211351 场景:随着数据量的增加,mysql所在的磁盘已占满,需要将data移动到空间较大的 ...

  8. jQuery获取动态产生的html内标签或元素

    下午分享<MVC编辑状态两个DropDownList联动>http://www.cnblogs.com/insus/p/3426563.html 不久,马上有网友问及三级联动的例子.Ins ...

  9. css溢出滚动条及去除滚动条的方法

    <div class="father"> <div class="childern"></div> </div> ...

  10. 24.Linux-Nand Flash驱动(分析MTD层并制作NAND驱动)

    1.本节使用的nand flash型号为K9F2G08U0M,它的命令如下: 1.1我们以上图的read id(读ID)为例,它的时序图如下: 首先需要使能CE片选 1)使能CLE 2)发送0X90命 ...