Pandas 数据分析基础
Pandas
安装
- anaconda 安装:
- conda list pandas 查看是否已经安装
- conda install pandas
- conda update pandas
- pip 安装
- pip install pandas
- apt 安装
- sudo apt-get install python-pandas
测试是否安装成功
nosetests pandases
不成功会进行提醒,可以重新安装或者更新
pandas数据结构
- Series
- DataFrame
Series
1 声明series 对象
s = pd.Series([12,3,9,1])
s
s = pd.Series([12,52,4,2],index=['a','b','c','d'])
s.values
s.index
2 用numpy数组或其他对象定义
arr=np.array([1,2,3])
s=pd.Series(arr)
# 注意这里的s对象中的元素是对arr的引用,如果改变arr的值,s的值也会改变
# 用作字典
dic={'red':123,'blue',122,'green':129}
s.Series(dic)
3 筛选元素
s[s>8] # 对values的比较
s/2
np.log(s)
4 其他函数
s.unique() # 只出现一次
s.value_counts() # 统计数量
# 做筛选
s.isin([0,3])
s[s.isin([0,3])]
# 空和不空
s.isnull()
s.notnull()
DataFrame
和excel类似
创建Frame
data={'title1':[1,2,3],'title2':[5,4,3]}
frame=pd.DataFrame(data)
frame=pd.DataFrame(data,columns=['title1'])
# index 会自动生成索引也可以通过index属性进行更改
pd.DataFrame(data,index=['one','two','three']) # 个数需要匹配
选取元素
frame.columns
frame.index
frame.values
frame['title1'] or frame.title1
# 行
frame.ix[2]
frame.ix[[0,1]]
frame[0:2]
frame['title1'][2]
赋值
frame.index.name='id'
frame.columns.name='cols'
frame['title1'][3]= 3
ser=pd.Series(np.arange(5))
frame['new']=ser
其他
# 所属关系
frame.isin([1.0,'a'])
# 删除一列
del frame['new']
# 筛选
frame[frame <= 2]
# 转置
frame.T
Index 对象
ser.idxmin()
ser.idxmax()
ser.index.is_unique()
# 执行更换索引
ser.reindex(['a','b','c'])
# 删除
ser.drop('0')
算数运算方法
frame1.add(frame2)
sub(), div(), mul()
DataFrame 与 Series的运算
frame=pd.DataFrame(np.arange(16).reshape(4,4),index=['red','blue','gren','yellow'],columns=['ball','pen','paper','socket'])
ser=pd.Series(np.arange(4),index=['ball','pen','paper','socket'])
frame - ser
Pandas 库函数
按行或列执行
f=lambda x:x.max() - x.min()
def f(x):
return x.max()-x.min()
frame.apply(f,axis=1) # 处理行
函数
sum()
mean()
describe() # 计算多个统计量
# 排序函数
sort_index([ascending=False][axis=1])
对数据结构中的元素排序
# series
ser.order()
# DataFrame
frame.sort_index(by='pen')
frame.sort_index(by=['pen','pencil'])
位次排序
- ser.rank()
- ser.rank(method='first')
- ser.rank(ascending=False)
相关性和协方差
correlation and covariance 计算通常涉及到两个Series 对象
>>> seq2=pd.Series([3,4,3,4,5,4,3,2],['06','07','08','09','10','11','12','13'])
>>> seq1=pd.Series([1,2,3,4,4,3,2,1],['06','07','08','09','10','11','12','13'])
>>> seq1.corr(seq1)
1.0
>>> seq1.corr(seq2)
0.7745966692414835
>>> seq1.cov(seq2)
0.8571428571428571
DataFrame 可以实现其对象的相关性和协方差,返回DataFrame矩阵
>>> frame2=pd.DataFrame([[1,4,3,6],[4,5,6,1],[3,3,1,5],[4,1,6,4]],index=['r','g','b','w'],columns=['ball','pen','pencil','paper'])
>>> frame2.corr()
ball pen pencil paper
ball 1.000000 -0.276026 0.577350 -0.763763
pen -0.276026 1.000000 -0.079682 -0.361403
pencil 0.577350 -0.079682 1.000000 -0.692935
paper -0.763763 -0.361403 -0.692935 1.000000
>>> frame2.cov()
ball pen pencil paper
ball 2.000000 -0.666667 2.000000 -2.333333
pen -0.666667 2.916667 -0.333333 -1.333333
pencil 2.000000 -0.333333 6.000000 -3.666667
paper -2.333333 -1.333333 -3.666667 4.666667
除此之外还可以计算DataFrame对象与Series或者DataFrame对象之间的关系
frame.corrwith(ser)
frame.corrwith(frame2)
NaN
过滤NaN
# series obj
ser.dropna()
or
ser[ser.notnull()]
# DataFrame obj
frame.dropna() # 整行都被删除
frame.dropna(how='all') # 删除全部Nan的列
为NaN填充
frame.fillna(0)
frame.filena('ball':1,'mug':2)
等级索引&分级
>>> mser=pd.Series(np.random.rand(6),[['a','a','b','b','c','c'],[2,3,6,4,5,8]])
>>> mser
a 2 0.936455
3 0.431867
b 6 0.996895
4 0.584551
c 5 0.883911
8 0.049483
dtype: float64
# 选取
mser['a'][2]=0.936455
DataFrame 与 Series转化
DataFrame -> Series : stack()
frame.stack()
Series -> DataFrame : unstack()
mser.unstack()
交换层级:
frame.colums.names=['a','b']
frame.index.name=['c','d']
frame.swaplevel('c','d')
frame.sortlevel('c')# 只按照一个层级进行排序
# 按层级统计数据
frame.sum(level='c')
frame.sum(level='c',axis=1)
Pandas 数据读写
读
- read_csv()
- read_excel()
- read_sql()
- read_json()
- read_html()
- read_clipboard()
写
- to_csv()
- to_excel()
- to_sql()
- to_json()
- to_html()
- to_clipboard()
CSV 文件
- read_csv()
- read_table()
- to_csv()
pd.csvframe=read_csv('data.csv')
pd.read_table('data.csv',sep=',')
# names 指定表头
read_csv('data.csv',names=['id'])
# header 添加表头
TxT RegExp 解析
在read_table中使用sep中的正则表达式
| . | 单个字符 |
|---|---|
| \d | 数字 |
| \D | 非数字 |
| \s | 空白字符 |
| \S | 非空白字符 |
| \n | 换行符 |
| \t | 制表符 |
>>> pd.read_table('tt.txt',sep='\s*')
white red blue green
0 1 5 2 3
1 2 7 8 5
2 3 3 6 7
>>> pd.read_table('tt.txt',sep='\D*',header=None)
# skiprows=[1,3,6]排除1,3,6 行
# skiprows=5 排除前五行
部分数据读取(常用用法)
从 skiprows 开始读,读多少 nrows行
read_csv('data.csv',skiprows=[2],nrows=3,header=None)
解析文本:
out=pd.Series()
i=0
# chunksize 一次处理数据行数
pieces = pd.read_csv('tips.csv',chunksize=3)
for piece in pieces:
out.set_value(i,piece['size'].sum())
i=i+1
往CSV中写数据
frame.to_csv('tt.csv',index=False,header=False)
替换,,中内容
frame.to_csv('new.csv',na_rep='NaN')
HTML
读取HTML
read_html()
to_html()
安装html5lib库
conda install html5lib
tf=pd.DataFrame(np.arange(4).reshape(2,2))
print(tf.to_html()) # 自动转化html
更加复杂的例子:(生成)
frame=pd.DataFrame(np.random.random((4,4)),index=['white','black','red','blue'],columns=['up','down','right','left'])
s=['<html>']
s.append('<head><title>DataFrame</title></head>')
s.append('<body>')
s.append(frame.to_html())
s.append('</body></html>')
html=''.join(s)
html_file=open('myFrame.html','w')
html_file.write(html)
html_file.close()
打开HTML文件:
>>> web_frame=pd.read_html('myFrame.html')
>>> web_frame
[ Unnamed: 0 up down right left
0 white 0.654247 0.917280 0.599515 0.401334
1 black 0.647599 0.555069 0.612985 0.279210
2 red 0.204044 0.719828 0.950169 0.749252
3 blue 0.089194 0.498193 0.568361 0.427534]
局限于读表格
从XML读取数据
lxml 库文件
from lxml import objectify
xml=objectify.parse('test.xml')
root=xml.getroot()
读写excel文件
pd.read_excel('data.xlsx')
pd.read_excel('data.xlsx','sheet2')
Pandas 数据分析基础的更多相关文章
- python中pandas数据分析基础3(数据索引、数据分组与分组运算、数据离散化、数据合并)
//2019.07.19/20 python中pandas数据分析基础(数据重塑与轴向转化.数据分组与分组运算.离散化处理.多数据文件合并操作) 3.1 数据重塑与轴向转换1.层次化索引使得一个轴上拥 ...
- pyhton pandas数据分析基础入门(一文看懂pandas)
//2019.07.17 pyhton中pandas数据分析基础入门(一文看懂pandas), 教你迅速入门pandas数据分析模块(后面附有入门完整代码,可以直接拷贝运行,含有详细的代码注释,可以轻 ...
- python pandas数据分析基础入门2——(数据格式转换、排序、统计、数据透视表)
//2019.07.18pyhton中pandas数据分析学习——第二部分2.1 数据格式转换1.查看与转换表格某一列的数据格式:(1)查看数据类型:某一列的数据格式:df["列属性名称&q ...
- 利用Python进行数据分析 基础系列随笔汇总
一共 15 篇随笔,主要是为了记录数据分析过程中的一些小 demo,分享给其他需要的网友,更为了方便以后自己查看,15 篇随笔,每篇内容基本都是以一句说明加一段代码的方式, 保持简单小巧,看起来也清晰 ...
- 动态可视化 数据可视化之魅D3,Processing,pandas数据分析,科学计算包Numpy,可视化包Matplotlib,Matlab语言可视化的工作,Matlab没有指针和引用是个大问题
动态可视化 数据可视化之魅D3,Processing,pandas数据分析,科学计算包Numpy,可视化包Matplotlib,Matlab语言可视化的工作,Matlab没有指针和引用是个大问题 D3 ...
- pyhton中pandas数据分析模块快速入门(非常容易懂)
//2019.07.16python中pandas模块应用1.pandas是python进行数据分析的数据分析库,它提供了对于大量数据进行分析的函数库和各种方法,它的官网是http://pandas. ...
- Numpy使用大全(python矩阵相关运算大全)-Python数据分析基础2
//2019.07.10python数据分析基础——numpy(数据结构基础) import numpy as np: 1.python数据分析主要的功能实现模块包含以下六个方面:(1)numpy—— ...
- Python数据分析基础教程
Python数据分析基础教程(第2版)(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1_FsReTBCaL_PzKhM0o6l0g 提取码:nkhw 复制这段内容后 ...
- Python数据分析基础PDF
Python数据分析基础(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1ImzS7Sy8TLlTshxcB8RhdA 提取码:6xeu 复制这段内容后打开百度网盘手 ...
随机推荐
- CSS cursor 属性
cursor 1.定义和用法 cursor 属性规定要显示的光标的类型(形状). 该属性定义了鼠标指针放在一个元素边界范围内时所用的光标形状(不过 CSS2.1 没有定义由哪个边界确定这个范围). 2 ...
- Zipline Beginner Tutorial
Zipline Beginner Tutorial Basics Zipline is an open-source algorithmic trading simulator written in ...
- Django 框架之 URL
URL配置就像Django所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表. # 示例: urlpatterns = [ path(route, view, kwa ...
- Django orm 中 python manage.py makemigrations 和 python manage.py migrate 这两条命令用途
生成一个临时文件 python manage.py makemigrations 这时其实是在该app下建立 migrations目录,并记录下你所有的关于modes.py的改动,比如0001_ini ...
- sails ORM组件 Waterline v0.10 英文文档
http://sailsdoc.swift.ren/ 这里有 sails中文文档 Introduction Installation Getting Started Models Data types ...
- vim文本编辑操作
文本选择操作 为了方便地选取文本块,Vim编辑器引入了可视模式(Visual Mode).要选取一段文本块,操作步骤如下: ▶ 将光标移动到要复制文本块的开始处.要注意的是 ...
- 利用trigger同步Oracle数据库
oracle不同数据库之间进行同步数据时,可以用触发器来实现,但需要数据库A访问数据库B,那么可以通过创建数据连接来实现,代码如下: CREATE DATABASE LINK dblink_test ...
- Teleport Ultra 垃圾代码 tppabs的清理<转>
在使用整站下载软件Teleport Pro或Teleport Ultra下载的离线文件里会包含大量垃圾代码,下载后就需要清除整站下载文件中的冗余代码:tppabs等.这些代码本是Teleport自动添 ...
- fzu1901Period II
地址:http://acm.fzu.edu.cn/problem.php?pid=1901 题目: Problem 1901 Period II Accept: 442 Submit: 1099 ...
- Python中常用技巧整理
Python中os.path的妙用 http://xpleaf.blog.51cto.com/9315560/1736956