[Python] Pandas初学笔记

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等.

猜你喜欢

转载自blog.csdn.net/pangtouyu_qy/article/details/79957764