测试环境使用的是Anaconda。
Pandas处理以下两个数据结构:(panel已弃用,将在以后的版本中删除。)
1、series
注释:Series是pandas中暴露给我们使用的基本对象,它是由相同元素类型构成的一维数据结构,同时具有列表和字典的属性,字典的属性由索引赋予。
- Series:有序,有索引
- list: 有序,无索引
- dict: 无序 ,有索引
pd.Series(data=None, index=None, name = None)
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有索引
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),是使用最多的对象。
pd.DataFrame(data=None, index=None, columns=None)
data无 行索引,无 列索引
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 = { '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 = { '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 )
pd.read_excel(io, sheetname=0, header=0, index_col=None, names=None)
序号 | 属性或方法 | 说明 |
---|---|---|
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>
序号 | 属性或方法 | 说明 |
---|---|---|
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>
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.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() | 学习中 |