[Python] Pandas初学笔记

2人阅读 评论(0) 收藏 举报
分类:

pandas是个强大的数据分析库.
内容(1~3)整理自Pandas官方入门教程.
Pandas有三种主要的数据结构: Series(1D), DataFrame(2D), Panel(3D)
使用之前要导入相关的库:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

1. 创建对象

1.1 创建一个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

1.2 创建一个DataFrame对象

dates = pd.date_range('20130101', periods=6) //创建包含6个日期的数组
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

创建出来的df为:
                   A         B         C         D
2013-01-01  0.469112 -0.282863 -1.509059 -1.135632
2013-01-02  1.212112 -0.173215  0.119209 -1.044236
2013-01-03 -0.861849 -2.104569 -0.494929  1.071804
2013-01-04  0.721555 -0.706771 -1.039575  0.271860
2013-01-05 -0.424972  0.567020  0.276232 -1.087401
2013-01-06 -0.673690  0.113648 -1.478427  0.524988

2. 查看(View)数据

2.1 查看后N行

df.tail(3)

输出:
                   A         B         C         D
2013-01-04  0.721555 -0.706771 -1.039575  0.271860
2013-01-05 -0.424972  0.567020  0.276232 -1.087401
2013-01-06 -0.673690  0.113648 -1.478427  0.524988

2.2 查看行键(index) / 列键(columns) / 数据本身(value)

df.index
输出:
DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04',
               '2013-01-05', '2013-01-06'],
              dtype='datetime64[ns]', freq='D')

df.columns
输出:
Index(['A', 'B', 'C', 'D'], dtype='object')

df.values
输出:
array([[ 0.4691, -0.2829, -1.5091, -1.1356],
       [ 1.2121, -0.1732,  0.1192, -1.0442],
       [-0.8618, -2.1046, -0.4949,  1.0718],
       [ 0.7216, -0.7068, -1.0396,  0.2719],
       [-0.425 ,  0.567 ,  0.2762, -1.0874],
       [-0.6737,  0.1136, -1.4784,  0.525 ]])

2.3 查看数据的简单统计分析结果(quick statistic summary)

df.describe()
输出:
              A         B         C         D
count  6.000000  6.000000  6.000000  6.000000
mean   0.073711 -0.431125 -0.687758 -0.233103
std    0.843157  0.922818  0.779887  0.973118
min   -0.861849 -2.104569 -1.509059 -1.135632
25%   -0.611510 -0.600794 -1.368714 -1.076610
50%    0.022070 -0.228039 -0.767252 -0.386188
75%    0.658444  0.041933 -0.034326  0.461706
max    1.212112  0.567020  0.276232  1.071804

2.4 对数据排序

df.sort_values(by='B') //默认排序方式为从小到大.
输出:
                   A         B         C         D
2013-01-03 -0.861849 -2.104569 -0.494929  1.071804
2013-01-04  0.721555 -0.706771 -1.039575  0.271860
2013-01-01  0.469112 -0.282863 -1.509059 -1.135632
2013-01-02  1.212112 -0.173215  0.119209 -1.044236
2013-01-06 -0.673690  0.113648 -1.478427  0.524988
2013-01-05 -0.424972  0.567020  0.276232 -1.087401

3. 选择数据(Selection)

3.1 获取某一列/行的数

df['A']
输出:
2013-01-01    0.469112
2013-01-02    1.212112
2013-01-03   -0.861849
2013-01-04    0.721555
2013-01-05   -0.424972
2013-01-06   -0.673690
Freq: D, Name: A, dtype: float64

df[0:3]
输出:
                   A         B         C         D
2013-01-01  0.469112 -0.282863 -1.509059 -1.135632
2013-01-02  1.212112 -0.173215  0.119209 -1.044236
2013-01-03 -0.861849 -2.104569 -0.494929  1.071804

3.2 通过标签(label)来选取数据

df.loc[dates[0]]
输出:
A    0.469112
B   -0.282863
C   -1.509059
D   -1.135632
Name: 2013-01-01 00:00:00, dtype: float64

df.at[dates[0],'A']
输出:
0.46911229990718628

3.3 通过位置(position)来选取数据

df.iloc[3] //选取第三行的数据
输出:
A    0.721555
B   -0.706771
C   -1.039575
D    0.271860
Name: 2013-01-04 00:00:00, dtype: float64

df.iloc[:,1:3]
输出:
                   B         C
2013-01-01 -0.282863 -1.509059
2013-01-02 -0.173215  0.119209
2013-01-03 -2.104569 -0.494929
2013-01-04 -0.706771 -1.039575
2013-01-05  0.567020  0.276232
2013-01-06  0.113648 -1.478427

4. 有必要掌握的操作

4.1 数据清洗

数据清洗的工作: 处理原始数据中的少量异常数据.
在数据量比较小的时候, 我们可以对缺失值,异常值进行拉格朗日插值法进行插值处理
如果数据样本较充足,我们直接对少量的异常值进行简单粗暴也是最有效的删除

操作步骤

(1) 用pandas读入数据并将之变为DataFrame.

data=pd.DataFrame(pd.read_excel('excel_name.xlsx',index=False))  

(2) 用describe()函数简单观察以下数据的总体情况

print(data.describe())  

(3) 填充缺失值

data=data.fillna('Missing_Data')  

(4) 逐行扫描数据,只要此行存在一个异常值。对此行进行删除。
实例代码如下: (该代码来自这里)

for i in range(data.index.max()):  
    if any([  
        'missing' in data.loc[i,:].values,  
        data.loc[i,'hour'] not in range(25),  
        data.loc[i,'pressure']>1500,  
        data.loc[i,'wind_direction']<0 or data.loc[i,'wind_direction']>360,  
        data.loc[i,'wind_speed']>10,  
        data.loc[i,'precipitation']>10  
        ]):  

        print('已删除存在异常值 %s 行数据'%i)  
        data.drop([i],inplace=True)  

(5) 检查一下处理后的数据.

print(data)  
print(data.describe())  

(6) 确认无误后保存

data.to_csv('cleaned_data.csv')  

4.2 数据抽取

要做的事情: 对满足某些条件的数据进行提取操作.
以下内容参考的是这篇文章.

操作步骤

(1) 用pandas读入数据并将之变为DataFrame.

data=pd.DataFrame(pd.read_excel('excel_name.xlsx',index=False))  

这里写图片描述
(2) 设置索引字段

Loandata = loandata.set_index('member_id')

这里写图片描述
(3) 按列与按列提取信息

loandata.ix[[1303503,1298717],'loan_amnt']

这里写图片描述

loandata.ix[[1303503,1298717],'loan_amnt'].sum()

这里写图片描述
(4) 提取特定日期的信息

//先设定好索引字段
loandata = loandata.set_index('issue_d')

这里写图片描述

//提取所有2016年3月的信息
loandata['2016-03']

这里写图片描述

(5) 按日期汇总信息

//resample函数可以完成日期的聚合工作
//W表示聚合方式是按周,how表示数据的计算方式,默认是计算平均值,这里设置为sum,进行求和计算。
loandata.resample('W',how=sum).head(10)

这里写图片描述
如果看着NaN不舒服, 可以用0填充空值, 在语句后面加 .fillna(0) 即可.

4.3 数据可视化

要利用matplotlib 的基础绘图功能

5. pandas相比excel的优势

5.1 处理日期型的数据

如resample函数可以搞定日期的聚合工作.

5.2 接口方面

excel好比是个孤岛. python和其他应用程序的接口更多一些.

5.3 复杂的统计计量方法

excel: 要用VBA(一种宏语言), 非常麻烦.
python: 有很多相关的库可以试用, pandas, statsmodels, numpy等.

查看评论

STL程序设计实践一:谨慎使用下标运算符

 STL程序设计实践一:谨慎使用下标运算符   STL中容器占据很重要的地位,部分容器支持像数组一样的下标运算符,使其能向数组一样方便的访问,但也存在同样的限制,如向量和双端队列。所以在应用中要小心使...
  • winmain
  • winmain
  • 2001-11-10 18:39:00
  • 909

Pandas学习笔记(不定期更新)

Pandas学习笔记同时记录一些小坑
  • github_33934628
  • github_33934628
  • 2017-04-09 23:06:37
  • 1094

pandas学习笔记(1)--pandas简介

Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高...
  • lwplwf
  • lwplwf
  • 2017-02-20 16:31:16
  • 1833

中文Python笔记

笔记来自 http://nbviewer.jupyter.org/github/lijin-THU/notes-python/blob/master/index.ipynb 学习摘抄。中文Python...
  • gongqingkui
  • gongqingkui
  • 2018-03-23 18:00:15
  • 71

Numpy & Pandas (莫烦 Python 数据处理教程)笔记

Numpy教程笔记:import numpy as np #numpy属性 print('#numpy属性') array = np.array([[1,2,3], ...
  • Enjoying_Science
  • Enjoying_Science
  • 2018-03-15 16:45:32
  • 57

Pandas DataFrame Notes

  • 2018年04月11日 11:43
  • 316KB
  • 下载

python——pandas包的一些功能笔记

pandas
  • m0_37959404
  • m0_37959404
  • 2017-07-25 21:23:08
  • 294

Python数据分析--pandas部分笔记

1、Series相关 Series类似于一个列向量,只是在其左侧加了索引,其包括values和index两个属性,Series.values和Series.index。Series对象本身以及其索引...
  • Fade__d
  • Fade__d
  • 2017-08-17 16:44:37
  • 445

python学习笔记(二)——Pandas十分钟入门

Pandas的数据结构主要分为三种: Series:一维同类型元素的数组 DataFrame:二维,大小可变的的表格结构,列与列的数据类型可以不同 Panel:三维,大小可变的数组首先引入一些需...
  • zhangyang10d
  • zhangyang10d
  • 2016-12-02 22:52:17
  • 2659

pandas exercises Notebook

  • 2018年01月04日 10:49
  • 11.21MB
  • 下载
    个人资料
    持之以恒
    等级:
    访问量: 4217
    积分: 369
    排名: 21万+
    文章分类
    文章存档
    最新评论