pandas 初学

来源:互联网 发布:linux 局域网ip扫描 编辑:程序博客网 时间:2024/06/05 06:13

pandas 的两个数据结构, Series 和 DataFrame

Series

创建series

obj = Series([1,2,3,4,5])

Series中有index , name , values

obj.values;obj.index;m

Series 可以接受list, dict,其中dict的 key 就是 index

手动添加 index 可以通过: Serie(data, index = index)进行添加

上面的方法同时可以用来根据index手动筛选数据

查看是否为NAN: pd.isnull() ; pd.notnull()

加名字: obj.name = 'example' ; obj.index.name = 'example'

DataFrame

创建DataFrame :

DataFrame()

DataFrame(data, columns = ['example', 'example', 'example'],  index = ['example', 'example', 'example'])

查看 列名: DataFrame.columns

查看单列: DataFrame.nameofcol 或者 DataFrame['colname']

查看单一行 使用 ix . Eg. frame2.ix['three'];  

添加或者修改单列: frame['column'] = np.arange(5);  或者定义一个新的 Series并定义相对应的index名称

DataFrame 获取index值和表值方法和Series相似

INDEX

reindex() 可以重新根据定义的index顺序排列

reindex()可以添加新的index,并通过 定义 fill_value 的值来定义其值

对于新的值, 有两种方法 method = ‘ffill' 或者 ‘bfill’

reindex() 同时可以重新选择列 通过定义 colums =['example',example,example]

 Drop entries

对于 Series, Series.drop(['inde_name'])

DataFrame: DataFrame.drop(['names'], axis = 1, 0)

axis = 0 指的是 从上往下的这个方向进行相应的运算, axis = 1 指的是 从左往右这个方向上进行运算。 一般默认为0这个方向

Index 选择 列表筛选

对于Series 很简单

对于 DataFrame, 选择前n行可以通过: dataframe[ : n]; 或者通过 ix: data.ix[ ['asdf', 'add'], [0,2,4,1]]


Series ,Data Frame之间的加减法 可以通过 简单相加 或者通过 func 进行

DataFrame 和 Series 的加减法 是以一行行的方式从上到下

通过func可以选择从那个axis 上进行运算

方程apply 和 mapping

出了使用 ufunc以外

可以使用 apply() 对一个axis进行apply 括号内的方程

对于每个element的apply,  DataFrame 可以使用 applymap, Series 通过 map()

排序排列

lexicographically sorting 

对于dataframe, sort_index(), 通过调试 axis 可以选择是对index 还是 column进行 排序

反序: ascending = False

对一个或多个列进行排序: sort_index(by = ['col1','col2'])

对于Series, 对其值排序 使用 Series.order()

ranking: Serise.rank(method = 'first', 'average', 'max')

Data Frame可以对不同的axis进行 rank

Index 重复值

.is_unique

简单统计

Pandas 获取数据 可以使用 import pandas.io.data

雅虎股票 信息 可以使用: data.get_data_yahoo(['tickers'], 'starting date' , 'end date')

dataframe 可以对每列数据计算 变化 使用 dataframe.pct_change()

pandas 中的 简单统计:count(), describe(), min(), max(), argmin, argmax, idmax, idmin, quantile, sum, mean, median, mad, var, std, skew, kurt, cumsum, cumin, cumax, cumprod, diff, pct_change


Corrlations and Covariance

.corr()

.cov()

如果想pairwise在dataframe 与dataframe/series之间进行对比, 可以使用 corrwith()


.unique()给出独有的数组

.value_counts()

pd.value_counts(obj.values, sort = False)

.isin(['value1', 'value2]) 查看时候否出现在列表的之中, 有利于进行筛选

使用 np.nan 作为 NA

.dropna() 除去有NAN 的行或列 (根据 axis的值)

.dropna(how = 'all'/'any')

.dropna(thresh = number) thresh为不是nan的个数


填充 NAN

.fillna() 括号内为可以替代的值; 如果传入的是一个dict, 那dict的key为要替换列的名字, value为要替换的值

可以设定 替换的个数, limit = n


Hierarchical Indexing

看着比较复杂其实挺好理解

unstack() 一个 H-indexed series , 将其变为一个DataFrame , 低级别的index转换成columns

对index和column添加名称。 frame.columns.names= ['level1', 'levle2']; frame.index.names = ['level1', 'level2']

 创建一个多层index 使用 pd.MultiIndex.from_arrays([[    ], [   ]],  names = [       ])


转换层 swaplevel(0, 1)

.sortlevel(0)  : 排序


不同层上的统计

e.g frame.sum(level = 'level2')

通过定义 axis 设定方向


可以通过 set_index(), 用表内的列作为index, 如果传入多个列, 第一个为 level 0 第二个为level 1 以此类推

reset_index() 充值index 为 0 - n, 之前的index变为列


PANEL 可以看作为一个三维的DATAFRAME

类似于dataframe, pd.panel()

Item axis , Major axis, Minor axis

可以使用swapaxes, 交换维度


可以使用 to_frame() 转换为一个 多层次index的Data Frame

to_panel() vice versa




0 0