Pandas 学习笔记
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