一、DataFrame初始化
DataFrame,Series属于pandas库
1.1 通过字典初始化
字典的键对应列名,键的值对应列的值。每个键应的值应该是一个list,如果键对应的值只是一个值而不是一个list,就这个列的所有值都是这个键对应的值。
注意所有list的长度应该一样,不能一个list都没有。
d={'a':[1,2,3],'b':[3,3,2],'m':9}
df=DataFrame(d)
df
Out[78]:
a b m
0 1 3 9
1 2 3 9
2 3 2 9
df['a']
Out[79]:
0 1
1 2
2 3
Name: a, dtype: int64
type(df['a'])
Out[80]: pandas.core.series.Series
d={'a':[1,2,3],'b':[3,3,2],'m':9}
df=DataFrame(d)
df
Out[83]:
a b m
0 1 3 9
1 2 3 9
2 3 2 9
1.2 直接初始化
传入一个array,一个array注意外面有[],内部也有[],内部的[]就是一行。使用DataFrame初始化时,可以传入index,否则默认为0,1,2...,可以传入列名,否则也默认为0,1,2...
ar=np.array([
[1,2,3,4],
[4,5,6,7]
])
ar
Out[43]:
array([[1, 2, 3, 4],
[4, 5, 6, 7]])
df2=DataFrame(ar,index=['one','two'],columns=['aa','bb','cc','dd'])
df2
Out[45]:
aa bb cc dd
one 1 2 3 4
two 4 5 6 7
二、DataFrame的索引
2.1 列索引
(这里使用1.1里的DataFrame对象)
DataFrame对象的每一列都是一个Series对象,比较像List,仍然可以用索引。都可以[:n]直接引用前n个,也可以[n:]直接引用后n个
a=df['a']
type(a)
Out[85]: pandas.core.series.Series
a
Out[86]:
0 1
1 2
2 3
Name: a, dtype: int64
a[0]
Out[87]: 1
a[:2]
Out[88]:
0 1
1 2
Name: a, dtype: int64
df[:2]
Out[92]:
a b m
0 1 3 9
1 2 3 9
三、Series的一些方法
3.1 value_counts()
可以统计列值有多少个
这里a里面的列值有3,2,1三种,每种列值只有一个,所以为1,假如有两个3那么第一行就是3 2了
默认按照列值对应个数降序排列
a.value_counts()
Out[93]:
3 1
2 1
1 1
Name: a, dtype: int64
四、DataFrame的方法
4.1 pivot_table()
这是python提供的透视表,与excel的透视表类似,与SQL里面的视图很像。
最简单的数据透视表必须有数据帧和索引。
例子:建立了一个如图所示的excel表格,将表格读入python
path=r'C:\Users\nichanglan\Desktop\a.xlsx'
import pandas as pd
import numpy as np
df=pd.read_excel(path)
df
Out[11]:
name age gender score
0 Alice 15 F 78
1 Dan 12 M 56
2 Hobo 14 M 87
3 Sun 15 F 78
4 Jackson 12 M 76
5 Bob 14 M 87
6 Cancy 13 F 60
建立一个以gender为索引的透视表,建立一个以[gender,name]为索引的透视表:
索引行默认对应的值是均值,如下面的gender为索引的表,默认age,acore都是所有为F或者M对应的均值。
pd.pivot_table(df,index=['gender'])
Out[12]:
age score
gender
F 14.333333 72.0
M 13.000000 76.5
pd.pivot_table(df,index=['gender','name'])
Out[13]:
age score
gender name
F Alice 15 78
Cancy 13 60
Sun 15 78
M Bob 14 87
Dan 12 56
Hobo 14 87
Jackson 12 76
默认是均值,当然也可以指定聚合函数aggfunc为np的函数,默认为均值mean。
pd.pivot_table(df,index=['gender'],aggfunc=np.sum)
Out[15]:
age score
gender
F 43 216
M 52 306
由上表可以知道,除了age,score之外的所有项都显示出来了,当然也可以指定values显示的哪些项,这里只显示age:
pd.pivot_table(df,index=['gender','name'],values=['age'])
Out[14]:
age
gender name
F Alice 15
Cancy 13
Sun 15
M Bob 14
Dan 12
Hobo 14
Jackson 12
最近较忙,未完待续
4.2 head()
可以传入一个数n,表示获取前n行,与[:n]效果相同,默认获取前5条