pandas 学习笔记

读者只需浏览一下本文的目录结构,我相信就已经掌握了1到2成的 pandas 知识。

本文的目的是建立一个大概的知识结构

在数据挖掘python阅读源码时,断断续续查阅了些 pandas 资料,并在源码中大致感受到了 pandas 在数据清理方面的方便性。

先将自己查阅的资料结合实际应用中常用到的方式,以学习笔记的形式整理出来。不会涉及到 pandas 的所有方面,细节知识还需自行查阅官方文档。


数据结构

  • Series: 一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近,其区别是:List中的元素可以是不同的数据类型,而Array和Series中则只允许存储相同的数据类型,这样可以更有效的使用内存,提高运算效率。
  • DataFrame:二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器。以下的内容主要以DataFrame为主。
  • Panel: 三维数组,可以理解为DataFrame的容器。

数据操作

一般操作

  1. head和tail方法可以显示DataFrame前N条和后N条记录,N为对应的参数,默认值为5。
  2. index(行)和columns(列)属性,可以获得DataFrame的行和列的标签。这也是了解数据内容和含义的重要步骤。
  3. decribe方法可以计算各个列的基本描述统计值。包含计数,平均数,标准差,最大值,最小值及4分位差。
  4. T 方法可以对数据进行转置

排序操作

  • df.sort_index(axis=1, ascending=False)

    sort_index可以以轴的标签进行排序。axis是指用于排序的轴,可选的值有0和1,默认为0即行标签(Y轴),1为按照列标签排序。 ascending是排序方式,默认为True即降序排列。

  • df.sort(columns=[‘one’,’two’],ascending=[0,1])

    DataFrame也提供按照指定列进行排序,可以仅指定一个列作为排序标准(以单独列名作为columns的参数),也可以进行多重排序(columns的参数为一个列名的List,列名的出现顺序决定排序中的优先级),在多重排序中ascending参数也为一个List,分别与columns中的List元素对应。

读写文件操作

这里仅介绍读csv格式数据,对于excel数据,请查阅其他资料

  • df = pd.read_csv(‘data.csv‘)
    
  • df.to_csv(‘data.csv‘)
    

数据选择

  • 选择一个单独的列df[‘a‘] 等同于 df.a
  • 通过[]进行选择,这将会对行进行切片:df[0:3]
  • 使用标签选取数据:
    df.loc[行标签,列标签]
    df.loc[‘a‘:‘b‘]#选取ab两行数据
    df.loc[:,‘one‘]#选取one列的数据
    

    df.loc的第一个参数是行标签,第二个参数为列标签(可选参数,默认为所有列标签),两个参数既可以是列表也可以是单个字符,如果两个参数都为列表则返回的是DataFrame,否则,则为Series。

  • 使用位置选取数据:
    df.iloc[行位置,列位置]
    df.iloc[1,1]#选取第二行,第二列的值,返回的为单个值
    df.iloc[0,2],:]#选取第一行及第三行的数据
    df.iloc[0:2,:]#选取第一行到第三行(不包含)的数据
    df.iloc[:,1]#选取所有记录的第一列的值,返回的为一个Series
    df.iloc[1,:]#选取第一行数据,返回的为一个Series
    
  • 通过逻辑指针进行数据切片:
    df[逻辑条件]
    df[df.one>=2]#单个逻辑条件
    df[(df.one>=1) & (df.one<3) ]#多个逻辑条件组合
    

    这种方式获得的数据切片都是DataFrame。


缺失处理

  • df.dropna(how=‘any‘) 会去掉缺失值的行
  • df.fillna(value=) 对缺失值进行填充

基本运算

  • df.mean()#计算列的平均值,参数为轴,可选值为0或1.默认为0,即按照列运算
  • df.sum(1)#计算行的和
  • df.apply(lambda x: x.max() - x.min())#将一个函数应用到DataFrame的每一列,这里使用的是匿名lambda函数,与R中apply函数类似

DataFrame合并

Contact


参考资料

[pandas 官方文档]((http://pandas.pydata.org/)

十分钟搞定 pandsa

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-29 10:46:15

pandas 学习笔记的相关文章

pandas学习笔记

引入所需要的包: import pandas as pd import numpy as np import matplotlib.pyplot as plt 一.创建对象 通过传递一个list对象来创建一个Series s = pd.Series([1,3,5,np.nan,6,8]) >>> s 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float64 通过传递一个numpy array,时间索引以及列标签来创建一个DataFrame at

Pandas学习笔记,字符串方法(string method)

一般语法格式Series.str.method().具体方法见http://pandas.pydata.org/pandas-docs/stable/api.html#string-handling 例如 Series.str.capitalize() 作用:Convert strings in the Series/Index to be capitalized.

pandas学习笔记D1

最近使用的是python3.6版本,发现使用read_csv()无法读取中文路径下的文件,今天终于解决.代码如下: import sys sys.getfilesystemencoding() sys._enablelegacywindowsfsencoding() sys.getfilesystemencoding() import pandas as pd df=pd.read_csv("20171207日报.csv",encoding='gbk')

Pandas学习笔记,如何用列的值过滤行

通过tushare引入DataFrame d = ts.get_hist_data('600848', start='2015-01-05', end='2015-01-09') data = pd.DataFrame(d) print(data) print(data.ma5 > data.ma20) open high close low volume price_change p_change date 2015-01-09 11.68 11.71 11.23 11.19 44851.56

Pandas学习笔记,选择多个行或列

loc--通过行标签索引行数据 iloc--通过行号获取行数据 ix--结合前两种的混合索引 具体见http://blog.csdn.net/xw_classmate/article/details/51333646 另外DataFrame[columnsA == columnsB]或者DataFrame.loc[columnsA == columnsB],可以选择满足中括号中的条件的行. columnsA == columnsB返回的是一个boolean Series,它的值为True,Dat

Pandas学习笔记,DataFrame的排序问题

数据来源见前边的几篇随笔 对其中的一列排序 data.high.sort_values(ascending=False) data.high.sort_values(ascending=True) data['high'].sort_values(ascending=False) data['high'].sort_values(ascending=True) p = data.high.sort_values() print(p) date 2015-01-05 11.39 2015-01-0

Pandas学习笔记,如何删除DataFrame中的一列(行)

同样,引入一个DataFrame d = ts.get_hist_data('600848', start='2015-01-05', end='2015-01-09') data = pd.DataFrame(d) print(data.columns) Index(['open', 'high', 'close', 'low', 'volume', 'price_change', 'p_change', 'ma5', 'ma10', 'ma20', 'v_ma5', 'v_ma10', 'v

Pandas学习笔记,axis的用法

axis=1表示列(1是竖着的),axis=0表示行 在mean()方法中有所不同,mean(axis=0)返回的是各列的平均值 d = ts.get_hist_data('600848', start='2015-01-05', end='2015-01-09') data = pd.DataFrame(d) print(data) print(data.mean(axis=0)) 运行结果是 open high close low volume price_change p_change d

pandas学习笔记D2

#获取昨日的日期 import datetime now_time = datetime.datetime.now() yesterday_time = now_time + datetime.timedelta(days=-1) yesterday_time_nyr = yesterday_time.strftime('%Y%m%d')#格式化输出 --此处省略数据源的读取,直接给出写入文件代码, 将'新老师'sheet表和'新同学'sheet表保存到 '日报'工作表 df = pd.Exce