数据处理:科学数据包pandas基本介绍
目录
- 第一部分:pandas包
-
- 一.pandas基本介绍
- 二.pandas基本操作
第一部分:pandas包
一.pandas基本介绍
pandas:python里分析结构化数据的工具集。
基础是numpy:提供高性能矩阵运算
图形库matplotlib:提供数据可视化
二.pandas基本操作
1.一维、二维数组的创建和基本操作:
import numpy as np
import pandas as pd
s = pd.Series([1,2,3,4,np.NaN]) #pandas中的一维数据Series
dates = pd.date_range('20200301',periods=6)
# pandas中的二维数组DataFrame,行索引index,列索引columns
#创建DataFrame方法一:
data = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('abcd'))
data
Out[12]:
a b c d
2020-03-01 0.974217 1.415198 0.449173 0.309444
2020-03-02 -0.783394 1.642082 1.929648 -1.730744
2020-03-03 -1.412779 2.459838 0.793193 1.093348
2020-03-04 -2.860147 -1.633533 1.972606 -1.106984
2020-03-05 1.312970 -0.240283 -0.411076 -0.175680
2020-03-06 -0.277543 -0.525772 0.556319 0.938473
#创建DataFrame方法二:
d = {'A':1,'B':pd.Timestamp('20200301'),'C':range(4)}
df = pd.DataFrame(d,index = list('abcd'))
df
Out[16]:
A B C
a 1 2020-03-01 0
b 1 2020-03-01 1
c 1 2020-03-01 2
d 1 2020-03-01 3
------------------------
df.head(2) #输出前2行,默认5行
Out[25]:
A B C
a 1 2020-03-01 0
b 1 2020-03-01 1
df.tail(1) #输出后1行,默认5行
Out[26]:
A B C
d 1 2020-03-01 3
对于一个二维数组df:
df.index----返回行索引
df.columns----返回列索引
df.values----返回值的数组
df.describe()----返回数组的一些数据
2.排序:
1)按照索引排序,axis=0按列索引,axis=1按行索引,acsending为升序排列,默认为True:
data.sort_index(axis=1,ascending=False)
Out[30]:
d c b a
2020-03-01 0.309444 0.449173 1.415198 0.974217
2020-03-02 -1.730744 1.929648 1.642082 -0.783394
2020-03-03 1.093348 0.793193 2.459838 -1.412779
2020-03-04 -1.106984 1.972606 -1.633533 -2.860147
2020-03-05 -0.175680 -0.411076 -0.240283 1.312970
2020-03-06 0.938473 0.556319 -0.525772 -0.277543
2)按照数值排序:
data.sort_values(by='a')
Out[34]:
a b c d
2020-03-04 -2.860147 -1.633533 1.972606 -1.106984
2020-03-03 -1.412779 2.459838 0.793193 1.093348
2020-03-02 -0.783394 1.642082 1.929648 -1.730744
2020-03-06 -0.277543 -0.525772 0.556319 0.938473
2020-03-01 0.974217 1.415198 0.449173 0.309444
2020-03-05 1.312970 -0.240283 -0.411076 -0.175680
3.选择:相比于速度较慢的位置索引data[2:4]方式,通过标签.loc()和数字.iloc()索引速度更快(省去了判断):
data.loc[:,['b','c']]
Out[46]:
b c
2020-03-01 1.415198 0.449173
2020-03-02 1.642082 1.929648
2020-03-03 2.459838 0.793193
2020-03-04 -1.633533 1.972606
2020-03-05 -0.240283 -0.411076
2020-03-06 -0.525772 0.556319
data.iloc[1:3,:3]
Out[47]:
a b c
2020-03-02 -0.783394 1.642082 1.929648
2020-03-03 -1.412779 2.459838 0.793193
4.对DataFrame数据的处理:
对于np.NaN(not a number)的处理,NaN不参与计算:
df1.dropna(how='any') #只要有NaN,整行舍弃
df1.fillna(value=5) #用数值替换NaN
5.关于.any()和.all()的区别:
.any()----将某个数列当做一个整体,有一个满足条件,则返回True
.all()----将某个数列当做一个整体,整体中每个都满足条件,则返回True


6.统计:
df1.mean(axis=1)----返回每行平均值的数组(默认axis=0,返回每列平均值)
df1.sum(axis=1)----返回每行数值之和的数组(默认axis=0,返回每列数值之和)
df.sub(s, axis=‘index’)----用二维数组df以列为单位减去s数组
df.apply(func)----传入函数,默认以每列数据为单位传入函数中(axis=0),apply函数会遍历每一行DataFrame的数据,返回一个Series数据结构
分组统计:
df.groupby(‘A’)或df.groupby([‘A’,‘B’])----以标签A,或标签A和B分组


7.数据合并:
1)纵向合并: pd.concat([xxx,xxx])
df1 = pd.concat([df.iloc[:3], df.iloc[3:7], df.iloc[7:]])
2)同列标签合并:pd.merge()
pd.merge(left, right, on=‘key’)----将left和right按照’key’合并
3)增加一行数据:
df.append(s,ignore_index=True)
8.数据透视:
1)pivot table/轴向旋转表:
pd.pivot_table(df, values=‘D’, index=[‘A’, ‘B’], columns=[‘C’])----对df进行操作,值为D一列的值,行索引为A和B列的值,列索引为C列的值。


2)df[df.A==‘one’].groupby(‘C’).mean()----对于df中的A列为one的行,以C列的值分组,返回D和E列的平均值。
9.时间序列:
rng = pd.date_range(‘20160301’, periods=600, freq=‘s’)----日期形式,周期为600,单位为s秒,freg默认为’D’,以天为单位。
10.category类别:
df = pd.DataFrame({"id":[1,2,3,4,5,6], "raw_grade":['a', 'b', 'b', 'a', 'a', 'e']})
df["grade"] = df["raw_grade"].astype("category")
df["grade"].cat.categories
out:Index([u'a', u'b', u'e'], dtype='object')
df["grade"].cat.categories = ["very good", "good", "very bad"]

