panda使用

���Ľ�������л�����Ķ�

数据结构之Series

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import pandas as pd
from import Series,DataFrame
Series是类似于一维数组的对象,由一组数据以及索引组成

#Series 1-给定了索引
a= Series([4,7,-5,3],index=['d','b','a','c'])
b= pd.Series([4,7,-5,3],index=['d','b','a','c'])
#2-未给定索引,索引为[0,N-1]
ser1 = Series([1,2,3,4])
#给index指定一个list
ser2 = Series(range(4),index = ["a","b","c","d"])
#3-也可以通过字典来创建Series对象
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
ser3 = Series(sdata)
#可以发现,用字典创建的Series是按index有序的
#在用字典生成Series的时候,也可以指定索引,
#当索引中值对应的字典中的值不存在的时候,则此索引的值标记为Missing,NA,
#并且可以通过函数(pandas.isnull,pandas.notnull)来确定哪些索引对应的值是没有的。
states = ['California', 'Ohio', 'Oregon', 'Texas']
ser3 = Series(sdata,index = states)
In [50]: ser3
Out[50]:
California NaN
Ohio 35000.0
Oregon 16000.0
Texas 71000.0
dtype: float64
# 判断哪些值为空
In [51]: pd.isnull(ser3)
Out[51]:
California True
Ohio False
Oregon False
Texas False
dtype: bool
In [52]: pd.notnull(ser3)
Out[52]:
California False
Ohio True
Oregon True
Texas True
dtype: bool

访问Series中的元素和索引

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
se2
Out[159]:
a 0
b 1
c 2
d 3
dtype: int64
# 访问索引为"a","c"的元素
se2[["a","c"]]
Out[160]:
a 0
c 2
dtype: int64
# 访问索引为"a"的元素
se2["a"]
Out[161]: 0
# 获取所有的值
se2.values
Out[162]: array([0, 1, 2, 3], dtype=int64)
# 获取所有的索引
se2.index
Out[163]: Index(['a', 'b', 'c', 'd'], dtype='object')

简单运算

在pandas的Series中,会保留NumPy的数组操作(用布尔数组过滤数据,标量乘法,以及使用数学函数),并同时保持引用的使用.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
se2[se2>2]
Out[165]:
d 3
dtype: int64
se2*2
Out[166]:
a 0
b 2
c 4
d 6
dtype: int64

np.exp(se2)
Out[167]:
a 1.000000
b 2.718282
c 7.389056
d 20.085537
dtype: float64

DataFrame

DataFrame是一个表格型的数据结构 它含有一组有序的列,每列可以是不同的值类型(数值/字符串/布尔型值) 它有行/列索引,可看做由Series组成的字典(共同用一个索引)

1
2
3
4
5
6
7
#DataFrame
d = {'state':['1','2'],'year':['a','b'],'pop':['x','y']}
frame = pd.DataFrame(d)
frame
state year pop
0 1 a x
1 2 b y

DataFrame基本用法

追加数据

1
2
3
4
5
6
7
frame2 =pd.DataFrame([['z','3','c'],['x','4','d']],columns=['pop','state','year'])
frame
pop state year
0 x 1 a
1 y 2 b
2 z 3 c
3 x 4 d

拼接数据

1
2
3
4
5
6
7
pd.concat([frame,frame2])
frame
pop state year
0 x 1 a
1 y 2 b
0 z 3 c
1 x 4 d

从csv导入数据

1
2
3
4
5
6
7
8
9
data = pd.read_excel('D:\\Users\\zyb\\Desktop\\plan.xlsx',header=5)
data
Out[189]:
5 FR接入数据库测试 1 Unnamed: 3
0 6.0 整体测试 1 NaN
1 NaN 总计 8 NaN

type(data)
Out[190]: pandas.core.frame.DataFrame

显示头尾几行

1
2
data.head()
data.tail()

显示列名/值

1
2
3
4
5
6
7
data.columns
Out[6]: Index([5, 'FR接入数据库测试', 1, 'Unnamed: 3'], dtype='object')

data.values
Out[7]:
array([[6.0, '整体测试', 1, nan],
[nan, '总计', 8, nan]], dtype=object)

筛选、缺失值处理

1
2
3
4
5
6
7
8
9
10
11
12
#筛选行/列
data.iloc[3:6]
data.iloc[:,3:6]
data.loc[:,["school", "age"]]

#条件筛选
data[data["G1"]<10]

#缺失值处理
data.fillna(value=0)
data.dropna(how="any")
data.isnull()

排序

1
2
3
4
5
6
7
#排序
data.sort_values("G1", ascending=False)

#统计并排序
s=pd.Series(data2.loc[:,"Medu"])
s=s.value_counts()
s=s.sort_index(axis=0)

算术运算

1
count

非NA值的数量

1
describe

针对Series或各DataFrame列计算汇总统计

1
min,max

计算最小值、最大值

1
argmin, argmax

计算能够获取到最小值和最大值的索引位置(整数)

1
idxmin, idxmax

计算能够获取到最小值和最大值的索引值

1
quantile

计算样本的分位数(0到1)

1
sum

值的总和

1
mean

值的平均数

1
media

值的算术中位数(50%分位数)

1
mad

根据平均值计算平均绝对离差

1
var, std

样本值的方差、标准差

1
skew, kurt

样本值的偏度(三阶矩)、峰度(四阶矩)

1
cumsum, cumprod

样本值的累计和/累计积

1
cummin, cummax

样本值的累计最小、最大值

1
diff

计算一阶差分(对时间序列很有用)

1
pct_change

计算百分数变化

groupby**统计、数据透视表**

1
2
3
4
5
6
7
8
#groupby
data.groupby(['sex', 'studytime'])['G1'].mean()

group1 = data.groupby('sex')
group1['G1','G2'].agg(['mean','sum'])

#数据透视表
pd.pivot_table(data, values='G1', index=['sex'],columns=['age'], aggfunc=np.mean)

类别转换

1
2
3
4
5
6
7
#类别转换
medu=data["Medu"].astype("category")
medu.cat.categories=["None","<4th grade","5th to 9th grade","secondary education","higher education"]

#转换成哑元
sex_dummies = pd.get_dummies(X_train['sex'], prefix='sex')
X_train=X_train.join(sex_dummies)
0%