python--学习笔记6 pandas

from pandas import Series,DataFrame #注意大小写

import pandas as pd

Series的字符串表现形式为:索引在左边,值在右边。

可以通过Series的values和index属性获得其数组表现形式和索引对象。

与普通Numpy数组相比,可以通过索引的方式选取Series中的单个或一组值。

 

DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型。它既有行索引也有列索引。

构建DataFrame的方法很多,最常用的是直接传入一个由等长列表或者numpy数组组成的字典,并且会自动加上索引列。也可以指定列顺序。

data = {'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],
       'year':[2000,2001,2002,2001,2002],
       'pop':[1.5,1.7,3.6,2.4,2.9]}
frame = DataFrame(data)
DataFrame(data,cloums=['year','state','pop'])

注:通过索引方式返回的列只是相应数据的视图而已,因此,对返回的series所做的任何修改都会反映到源DataFrame上。通过Series的copy方法即可显式地复制列。


reindex

创建一个适应新索引的新对象,即会根据新索引进行重排,如果某个索引值当前不存在,就引入缺失值。

参数 说明
ffill或pad 前向填充
bfill或backfill 后向填充

 


pandas对象拥有一组常用的数学和统计方法。它们大部分都属于约简和汇总统计,用于从Series中提取单个值或从DataFrame的行或列中提取一个Series。跟对应的Numpy数组方法相比,它们都是基于没有缺失数据的假设而构建的。

.describe 一次性产生多个汇总统计.

利用DataFrame的corrwith方法,可以计算其列和行与另一个列或者行之间的相关系数。

 


唯一值

obj = Series(['c','a','d','a','a','b','b','c','c'])
uniques=obj.unique()
uniques

输出 array([c,a,d,b], dtype=object)

返回的唯一值是未排序的,如果需要的话,可以对结果再次排序( uniques.sort() )。

value_counts用于计算一个Series中各值出现的频率。是一个顶级pandas方法,可以用于任何数组或序列。


 

Pandas对象上的所有描述和统计都排除了缺失数据,即浮点值NaN和None。

1. dropna 过滤缺失数据。对于一个Series,dropna返回一个仅含有非空数据和索引值的Series。 data.dropna()

2. 使用布尔型索引  data[data.notnull()]

而对于DataFrame对象,事情有些复杂,dropna默认丢弃任何含有缺失值的行。而加上 data.dropna(how='all')将只丢弃全为NA的行。丢弃列的话只需传入axis=1

另一个滤除DataFrame行的问题涉及时间序列数据,如果只想留下一部分观测数据,可以使用thresh参数实现。

 

填充缺失数据

fillna(0)可以将缺失值替换成常数值,0可以换。如果是通过一个字典调用的fillna,则可实现对不同列填充不同的值。df.fillna({1: 0.5, 3: -1}) 给第二列空值赋 0.5,第4列赋-1。 也可以传入series的平均值,中位值,向下向上填充等等。

 

层次化索引

在数据重塑和基于分组的操作中很重要。在一个轴上拥有多个索引。

 


pandas 自动类型转化 TextParser类。

1 from pandas.io.parsers import TextParser
2 
3 def parse_option_data(tabl):
4       rows = table.findall('.//tr')
5       header = _unpack(rows[0], kind='th')
6       data = [_unpack(r) for r in rows[1:]]
7       return TextParser(data, names = header).get_chunk()

 


 

离散化和面元(bin)划分

要实现该功能,需要使用pandas的cut函数:

 1 ages = [20,22,25,27,21,23,37,31,61,45,41,32]
 2 bins = [18,25,35,69,100]
 3 cats=pd.cut(ages,bins)
 4 pd.value_counts(cats)
 5 
 6 output:(18, 25]     5
 7 (35, 69]     4
 8 (25, 35]     3
 9 (69, 100]    0
10 dtype: int64

如果向cut传入的是面元的数量而不是确切的面元边界,则它会根据数据的最小值和最大值计算等长面元。下面的例子将一些均匀分布的数据分为四组:

1 data=np.random.rand(20)
2 pd.cut(data,4,precision=2)--精确两位小数

qcut是类似于cut的函数,根据样本分位数进行面元划分,可以保证每个面元中含有相同数量的数据点。

这两个离散化函数对于分量和分组分析非常重要。


 

异常值,也叫孤立点或者离群值,它的过滤或者变换很大程度上其实是数组运算。下面看一个含有正态分布数据的DataFrame:

1 np.random.seed(12345)
2 data=DataFrame(np.random.randn(1000,4))
3 data.describe()

 

posted on 2019-01-10 23:45  椰汁黑糯米  阅读(273)  评论(0编辑  收藏  举报

导航