Pandas学习笔记(一)

Pandas 学习笔记

  • Pandas环境
    • Pandas数据结构
      • 创建series
      • 创建DataFrame
      • 由文件创建
    • Pandas基本功能
      • series基本功能
      • DataFrame基本功能
    • series数值统计计算
    • DataFrame数值统计计算

Pandas环境

测试环境使用的是Anaconda。

Pandas数据结构

Pandas处理以下两个数据结构:(panel已弃用,将在以后的版本中删除。)
1、series
注释:Series是pandas中暴露给我们使用的基本对象,它是由相同元素类型构成的一维数据结构,同时具有列表和字典的属性,字典的属性由索引赋予。
- Series:有序,有索引
- list: 有序,无索引
- dict: 无序 ,有索引

创建series

pd.Series(data=None, index=None, name = None)

  • data:多种类型;
  • index:索引信息;
  • name:对data的说明,一般在和DataFrame、Index互相转换时才需要。

data无索引
- 如果 data 为 ndarray(1D) 或 list(1D),那么其缺少 Series 需要的索引信息;
- 如果提供index,则必须和data长度相同;
- 如果不提供 index,那么其将生成默认数值索引 range(0, data.shape[0])。

import numpy as np
import pandas as pd
data = [1,2,3]
index = ['a','b','c']
tmp = pd.Series(data=data,index=index,name='ss')
s

out:
a 1
b 2
c 3
Name: sss, dtype: int64
data有索引

  • 如果 data 为 Series 或 dict ,那么其已经提供了 Series 需要的索引信息,所以 index 项是不需要提供的;
  • 如果额外提供了 index 项,那么其将对当前构建的Series进行 重索引(增删)(等同于reindex操作)。值为NaN
d = {1:'a',2:'b',3:'c'}
st = pd.Series(data=d,name='tmp')
st
index = [1,2,4]
st = pd.Series(data=d,index=index,name='tmp1')
st

out:
1 a
2 b
4 NaN
Name: tmp1, dtype: object
2、 DataFrame

DataFrame由具有共同索引的Series按列排列构成(2D),是使用最多的对象。

创建DataFrame

pd.DataFrame(data=None, index=None, columns=None)

data无 行索引,无 列索引

  • 如果 data 为 ndarray(2D) or list(2D),那么其缺少 DataFrame 需要的行、列索引信息;
  • 如果提供 index 或 columns 项,其必须和data的行 或 列长度相同;
  • 如果不提供 index 或 columns 项,那么其将默认生成数值索引range(0, data.shape[0])) 或 range(0, data.shape[1])。
data = np.array([[1,2,3],[4,5,6]] )
index = ['a','b']
columns = ['A','B','C']
df = pd.DataFrame(data=data, index = index,columns=columns)
df
A	B	C

a 1 2 3
b 4 5 6

data无 行索引,有 列索引

  • 如果data为 dict of (ndarray(1D) or list(1D))所有ndarray或list的长度必须相同。dict的key为DataFrame提供了需要的columns信息,缺失index;
  • 如果提供 index 项,必须和list的长度相同; 如果不提供 index,那么其将默认生成数值索引range(0, data.shape[0]));
  • 如果还额外提供了columns项,那么其将对当前构建的DataFrame进行 列重索引。值为:NaN
data = { 'A' : [1,4], 'B': [2,5], 'C':[3,6] }
index = ['a','b']
columns = ['A','B','D']
df = pd.DataFrame(data=data, index = index, columns = columns)
df

out:
A B D
a 1 2 NaN
b 4 5 NaN

data有 行索引,有 列索引

  • 如果data为 dict of (Series or dict),那么其已经提供了DataFrame需要的所有信息;
  • 如果多个Series或dict间的索引不一致,那么取并操作(pandas不会试图丢掉信息),缺失的数据填充NaN;
  • 如果提供了index项或columns项,那么其将对当前构建的DataFrame进行重索引(reindex,andas内部调用接口)。
data = { 'A' : { 'a':1, 'b':4}, 'B': {'a':2,'b':5}, 'C':{'a':3, 'c':6} }
df = pd.DataFrame(data=data)
df

out:
A B C
a 1.0 2.0 3.0
b 4.0 5.0 NaN
c NaN NaN 6.0

由文件创建

pd.read_csv(filepath_or_buffer, sep=’,’, header=‘infer’, names=None,index_col=None, encoding=None )

  • filepath_or_buffer:路径和文件名不要带中文,带中文容易报错。
  • sep: csv文件数据的分隔符,默认是’,’,根据实际情况修改; header:如果有列名,那么这一项不用改;
  • names:如果没有列名,那么必须设置header = None, names为需要传入的列名列表,不设置默认生成数值索引;
  • index_col:list of (int or name),传入列名的列表或者列名的位置,选取这几列作为索引
  • encoding:根据文档编码来确定,如果有中文读取报错,试试encoding = ‘gbk’。

pd.read_excel(io, sheetname=0, header=0, index_col=None, names=None)

  • header:如果有列名,那么这一项不用改;
  • names:如果没有列名,那么必须设置header = None,names为列名的列表,不设置默认生成数值索引;

Pandas基本功能

series基本功能

序号 属性或方法 说明
1 axes 返回轴标签列表
2 dtype 返回数据类型
3 size 返回series大小
4 empty 如果series为空,返回true
5 ndim 返回底层数据的维数,默认:1
6 values 返回series的值,类型为ndarray
7 head 返回前N行数据
8 tail 返回后N行
data = pd.Series(data=np.random.randn(10))
print('data:')
print(data)
print('-'*50)
print("axes:")
print(data.axes)
print('-'*50)
print('dtype:')
print(data.dtype)
print('-'*50)
print('empty:')
print(data.empty)
print('-'*50)
print('ndim:')
print(data.ndim)
print('-'*50)
print('size:')
print(data.size)
print('-'*50)
print('values:')
print(data.values)
print('-'*50)
print('head:')
print(data.head)
print('-'*50)
print('tail:')
print(data.tail)

out:

data:
0   -0.534245
1    0.281673
2   -0.294187
3    1.255567
4   -0.819118
5    0.702596
6   -1.069786
7   -0.199798
8   -1.135473
9   -0.020347
dtype: float64
--------------------------------------------------
axes:
[RangeIndex(start=0, stop=10, step=1)]
--------------------------------------------------
dtype:
float64
--------------------------------------------------
empty:
False
--------------------------------------------------
ndim:
1
--------------------------------------------------
size:
10
--------------------------------------------------
values:
[-0.53424507  0.28167307 -0.29418676  1.2555672  -0.81911813  0.70259635
 -1.06978563 -0.19979839 -1.13547279 -0.02034657]
--------------------------------------------------
head:
<bound method NDFrame.head of 0   -0.534245
1    0.281673
2   -0.294187
3    1.255567
4   -0.819118
5    0.702596
6   -1.069786
7   -0.199798
8   -1.135473
9   -0.020347
dtype: float64>
--------------------------------------------------
tail:
<bound method NDFrame.tail of 0   -0.534245
1    0.281673
2   -0.294187
3    1.255567
4   -0.819118
5    0.702596
6   -1.069786
7   -0.199798
8   -1.135473
9   -0.020347
dtype: float64>

DataFrame基本功能

序号 属性或方法 说明
1 T 转置行、列
2 axes 返回一个列,行轴标签和列轴标签作为唯一的成员。
3 dtypes 返回此对象中的数据类型
4 empty 如果全空为true
5 ndim 轴/数组维度大小。
6 shape 返回表示DataFrame的维度的元组。
7 size 元素个数
8 values DataFrame的Numpy表示
9 head 返回前N行
10 tail 返回后N行
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Minsu','Jack']),
   'Age':pd.Series([25,26,25,23,30,29,23]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
data = pd.DataFrame(data=d)
print('data:')
print(data)
print('-'*50)
print('T:')
print(data.T)
print('-'*50)
print("axes:")
print(data.axes)
print('-'*50)
print('dtypes:')
print(data.dtypes)
print('-'*50)
print('empty:')
print(data.empty)
print('-'*50)
print('ndim:')
print(data.ndim)
print('-'*50)
print('shape:')
print(data.shape)
print('-'*50)
print('size:')
print(data.size)
print('-'*50)
print('values:')
print(data.values)
print('-'*50)
print('head:')
print(data.head)
print('-'*50)
print('tail:')
print(data.tail)

out:

data:
    Name  Age  Rating
0    Tom   25    4.23
1  James   26    3.24
2  Ricky   25    3.98
3    Vin   23    2.56
4  Steve   30    3.20
5  Minsu   29    4.60
6   Jack   23    3.80
--------------------------------------------------
T:
           0      1      2     3      4      5     6
Name     Tom  James  Ricky   Vin  Steve  Minsu  Jack
Age       25     26     25    23     30     29    23
Rating  4.23   3.24   3.98  2.56    3.2    4.6   3.8
--------------------------------------------------
axes:
[RangeIndex(start=0, stop=7, step=1), Index(['Name', 'Age', 'Rating'], dtype='object')]
--------------------------------------------------
dtypes:
Name       object
Age         int64
Rating    float64
dtype: object
--------------------------------------------------
empty:
False
--------------------------------------------------
ndim:
2
--------------------------------------------------
shape:
(7, 3)
--------------------------------------------------
size:
21
--------------------------------------------------
values:
[['Tom' 25 4.23]
 ['James' 26 3.24]
 ['Ricky' 25 3.98]
 ['Vin' 23 2.56]
 ['Steve' 30 3.2]
 ['Minsu' 29 4.6]
 ['Jack' 23 3.8]]
--------------------------------------------------
head:
<bound method NDFrame.head of     Name  Age  Rating
0    Tom   25    4.23
1  James   26    3.24
2  Ricky   25    3.98
3    Vin   23    2.56
4  Steve   30    3.20
5  Minsu   29    4.60
6   Jack   23    3.80>
--------------------------------------------------
tail:
<bound method NDFrame.tail of     Name  Age  Rating
0    Tom   25    4.23
1  James   26    3.24
2  Ricky   25    3.98
3    Vin   23    2.56
4  Steve   30    3.20
5  Minsu   29    4.60
6   Jack   23    3.80>

series数值统计计算

value_counts()
不适合DataFrame。
Series/Index.value_counts(normalize=False, ascending=False, bins=None)
normalize:True or False,计算频次或者频率比;
ascending:True or False,排序方式,默认降序;
bins:int,pd.cut的一种快捷操作,对连续数值型效果好;

In [12]:
s = pd.Series([1,2,1,2,1,3])
s
Out[12]:
0    1
1    2
2    1
3    2
4    1
5    3
dtype: int64
In [13]:
s.value_counts()
Out[13]:
1    3
2    2
3    1
dtype: int64
In [14]:
s.value_counts(ascending = True)
Out[14]:
3    1
2    2
1    3
dtype: int64
In [36]:
s.value_counts( bins = 2)   # bins按照int平均分割,左开右闭,左侧外延1%以包含最左值
Out[36]:
(0.997, 2.0]    5
(2.0, 3.0]      1
dtype: int64

DataFrame数值统计计算

DataFrame轴可以通过名称或整数来指定:
一、通过整数指定:
例如:DataFrame.sum(1)
数据帧(DataFrame) - “index”(axis=0,默认),columns(axis=1)
二、通过名称指定:
例如:DataFrame.sum(axis=‘index’)
axis:‘index’-沿列加,‘columns’-沿行加

序号 函数 说明
1 count() 非空观测数量
2 sum() 所有值之和
3 mean() 所有值得平均值
4 median() 所有值得中位数
5 mode() 值的模值
6 std() 值的标准偏差
7 min() 所有值中的最小值
8 max() 所有值中的最大值
9 abs() 绝对值
10 prod() 数组元素的乘积
11 sumsum() 累计总和
12 cumprod 累计乘积
13 var() 方差
14 cov() 伪方差
15 corr() 学习中
16 corrwith() 学习中

你可能感兴趣的:(python)