python-pandas note

2017/7/24 posted in  Python

基本数据结构

Series

一种类似于一维数组的对象,是由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。

仅由一组数据也可产生简单的Series对象。注意:Series中的索引值是可以重复的

Series的创建方式

  • 通过一维数组创建
  • 通过字典创建

通过一维数组创建Series

import pandas as pd
import numpy as np
ser01=pd.Series(np.array([1,2,3,4]))
ser01
0    1
1    2
2    3
3    4
dtype: int64
ser01.dtype
dtype('int64')
# 查看ser01的索引
ser01.index
RangeIndex(start=0, stop=4, step=1)
# 查看ser01的值
ser01.values
array([1, 2, 3, 4])
# 重置索引
ser01.index=['hadoop','spark','flume','kafka']
ser01
0    1
1    2
2    3
3    4
dtype: int64
# 指定类型,指定索引进行创建
pd.Series([1,2,3,4,5],dtype='float',index=list('abcde'))
a    1.0
b    2.0
c    3.0
d    4.0
e    5.0
dtype: float64

通过字典创建Series

dic={
    'hadoop':90,
    'spark':100,
    'kafka':80
}

# 通过字典创建的时候,字典的key就是索引了.字典的值就是Series的值
ser02=pd.Series(dic)
ser02
hadoop     90
kafka      80
spark     100
dtype: int64
ser02.values
array([ 90,  80, 100])

Series值的获取

ser03=pd.Series(np.arange(1,6),index=list('abcde'))
ser03
a    1
b    2
c    3
d    4
e    5
dtype: int64
# 通过索引拿
ser03['a']
1
ser03['c']
3
ser03[['a','c']]
a    1
c    3
dtype: int64
# 通过下标拿
ser03[1]
2
...... ,

DataFrame

一个表格型的数据结构,包含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型等),

DataFrame即有行索引也有列索引,可以被看做是由Series组成的字典。

df=pd.DataFrame({
    'order_id':['1001','1002','1003','1004','1005','1006'],
    'member_id':['a01','a02','a03','a01','a02','a03'],
    'order_amt':[90,76,89,98,68,89],
    'gender':['man','women','man','women','man','man']
})
df
gender member_id order_amt order_id
0 man a01 90 1001
1 women a02 76 1002
2 man a03 89 1003
3 women a01 98 1004
4 man a02 68 1005
5 man a03 89 1006

去重

df['member_id'].unique()
array(['a01', 'a02', 'a03'], dtype=object)

简单聚合统计

df.order_amt.value_counts()
89    2
98    1
68    1
76    1
90    1
Name: order_amt, dtype: int64
df
gender member_id order_amt order_id
0 man a01 90 1001
1 women a02 76 1002
2 man a03 89 1003
3 women a01 98 1004
4 man a02 68 1005
5 man a03 89 1006
df.groupby('gender')['order_amt'].count()
gender
man      4
women    2
Name: order_amt, dtype: int64
df.groupby(