数据分析之pandas学习
程序员文章站
2024-01-19 19:19:40
...
pandas的安装
pip3 install pandas
pandas简介
- Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的
- pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具
- pandas提供了大量能使我们快速便捷地处理数据的函数和方法
- 它是使Python成为强大而高效的数据分析环境的重要因素之一
数据结构
- Series:一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近。Series如今能保存不同种数据类型,字符串、boolean值、数字等都能保存在Series中
- Time- Series:以时间为索引的Series
- DataFrame:二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器
- Panel :三维的数组,可以理解为DataFrame的容器
series
series创建
import numpy as np
import pandas as pd
# 特别地,由ndarray创建的是引用,而不是副本。对Series元素的改变也会改变原来的ndarray对象中的元素。(列表没有这种情况)
# 由列表创建series,创建的是副本(深拷贝)
# 由列表创建series
l = [1,2,3,4,5]
s = pd.Series(l)
s[0] = 20
print(s)
0 20
1 2
2 3
3 4
4 5
dtype: int64
# 由numpy创建
n = np.array([1,2,3,4,5])
s = pd.Series(n, )
s.index=list('ABCDE') # 还可以通过设置index参数指定索引
print(s)
A 1
B 2
C 3
D 4
E 5
dtype: int32
# 由字典创建
data_dict = {'A': 1, 'B': 2, 'C': 3, 'D':4}
s = pd.Series(data_dict)
print(s)
A 1
B 2
C 3
D 4
dtype: int64
series的属性
import numpy as np
import pandas as pd
l = [1,2,3,4,5]
s = pd.Series(l)
s.shape #元组形式返回基础数据的形状
print(s.size) #返回基础数据的数量
print(s.index) # 返回数据的索引
print(s.values) # 返回数据的值
# 样式快速查看,可以通过head(),tail()快速查看Series对象的样式(DataFrme中也有)
# head():默认返回前5个,也可给定具体的数目
print(s.head())
# tile():默认返回后5个,也可给定具体的数目
# 缺失数据显示NaN(not a number),当索引没有对应的值时,可能出现缺失数据显示NaN(not a number)的情况
s1 = pd.Series({'a': np.nan, 'b': 1, 'c': 2, 'd': 3})
print(s1)
a NaN
b 1.0
c 2.0
d 3.0
dtype: float64
# 可以使用pd.isnull(),pd.notnull(),或自带isnull(),notnull()函数检测缺失数据
pd.isnull(s1)
a True
b False
c False
d False
dtype: bool
pd.notnull(s1)
a False
b True
c True
d True
dtype: bool
s1.isnull()
a True
b False
c False
d False
dtype: bool
s1.notnull()
a False
b True
c True
d True
dtype: bool
DataFrame
from pandas import *
import pandas as pd
import numpy as np
# 读取csv、xlsx文件,获得DataFrame数据结构
#data = pd.read_csv('filename.csv',header=None)
#data = pd.read_excel('filename.xlsx')
# 将DataFrame数据结构保存为csv文件
#data.to_csv('filename.csv',header=None,index=False)
'''
DataFrame:表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)
'''
# 利用字典创建DataFrame数据结构
data = {'one':[1,2,3],'two':[1,2,3],'three':['a','b','c']}
print( DataFrame(data) )
# 指定列的序列进行排序
print( DataFrame(data,columns = ['three','two','one']) )
# 指定行、列索引
frame = DataFrame(data,columns = ['three','two','one'], index = ['aa','bb','cc'])
print( frame )
#获取列索引
print(frame.columns)
#获取列索引指定的数据,返回的是Series数据结构
print(frame['one'])
#获取指定行的数据
print(frame.ix['aa'])
#修改指定列的值
frame['one'] = 6
frame['one'] = np.arange(3)
frame['one'] = Series([1,2,3],index = ['aa','bb','cc'])
print(frame)
# 为不存在列赋值会创建出一个新列
frame['four'] = frame['one']==1
print(frame)
# 删除不需要的列
del frame['four']
print(frame)
# 将嵌套字典传给DataFrame,外层字典的键作为列索引,内层字典的键作为行索引
data = {'five':{'dd':1,'ee':2,'ff':3},'six':{'dd':1,'ee':2}}
print(DataFrame(data))
# 显式设定行索引对应值,没有则为缺失值
print(DataFrame(data,index = ['dd','e','f']))
# 设置DataFrame的index和columns的name属性
frame.index.name = 'index'
frame.columns.name = 'columns'
print(frame)
# 以二维数组的形式返回DataFrame中的数据,不存在行、列索引值
print(frame.values)
# 创建一个DataFrame结构,并重新设置行、列索引
frame = DataFrame(np.arange(9).reshape((3,3)), index = ['a','c','d'], columns=['one','two','three'])
print(frame)
# 重新设置行索引 不存在的行为空值
print(frame.reindex(index = ['a','b','c','d']))
# 重新设置列索引
print(frame.reindex(columns = ['three','two','one']))
# 同时重新设置行、列索引
print( frame.reindex(index = ['a','b','c','d'],columns = ['three','two','one']) )
print( frame.ix[['a','b','c','d'],['three','two','one']] )
# 通过索引删除指定行、删除指定列
print(frame.drop('a'))
print(frame.drop('one',axis = 1))
# 获取前两行 获取后两行
print(frame.head(2))
print(frame.tail(2))
# 索引的选取和过滤
print(frame['one'])
print(frame[0:1]) #打印选取行
print(frame[frame['one']>0]) #打印满足条件的
# 对数据作bool处理
print( frame < 4 )
# 选取指定行、列的子集
print(frame.ix['a',['one','two']])
print(frame.ix[0,[0,1]])
# DataFrame的算术运算,设置空值为0
df1 = DataFrame(np.arange(12.).reshape((3,4)),columns = list('abcd'))
df2 = DataFrame(np.arange(20.).reshape((4,5)),columns = list('abcde'))
print(df1 + df2)
print(df1.add(df2,fill_value = 0))
# 按照行索引、列索引排序
frame = DataFrame(np.arange(4).reshape((2,2)),index = ['b','a'],\
columns = ['two','one'])
print(frame.sort_index())
print(frame.sort_index(axis = 1))
# 按照某列的值进行排序
print(frame.sort_index(by = 'two'))
# 判断索引值是否都是唯一值
print(frame.index.is_unique)
print(frame.columns.is_unique)
#DataFrame数据结构的汇总
df = DataFrame([[1,np.nan],[2,2],[np.nan,np.nan]],index = list('abc'),\
columns = ['one','two'])
# 按列求和 按行求和
print(df.sum())
print(df.sum(axis = 1))
# 按行求均值 当行存在空值时,则禁止计算均值
print(df.mean(axis = 1))
print(df.mean(axis = 1,skipna = False))
# 获得各列中最大最小值的行索引
print(df.idxmax())
# 一次性产生多个汇总统计,按列统计的信息
print(df.describe())
# 丢弃任何含有nan的行、列
print(df.dropna())
print(df.dropna(axis = 1))
# 值丢弃全为nan的行
print(df.dropna(how='all'))
print(df.dropna(axis = 1, how = 'all'))
# 将nan替换为指定值、当前列的均值
print(df.fillna(1))
print(df.fillna(df.mean()))
# 将nan替换为nan所在列上面的值
print(df.fillna(method = 'ffill'))
# 调用字典,实现对不同的列填充不同的值
print(df.fillna({'one':0,'two':1}))
# 层次化索引,在一个轴上拥有两个或两个以上的索引级别,即用低维表示高维
data = Series(np.random.randn(6),index = [['a','a','a','b','b','b'],\
[1,2,3,1,2,3]])
print(data)
# 获得数据的索引
print(data.index)
# 选取外层数据的子集
print(data['a'])
# 选取内层数据的子集
print(data[:,1])
# 将此多层次Series结构转化为DataFrame结构、逆转换
print(data.unstack())
print(data.unstack().stack())
以后将会继续更新博客,感谢大家的交流与关注
上一篇: matplotlib绘图无法显示中文
下一篇: numpy基本使用01
推荐阅读
-
数据分析之pandas学习
-
mysql数据表的基本操作之表结构操作,字段操作实例分析
-
Javascript学习笔记一 之 数据类型_基础知识
-
python数据清洗工具、方法、过程整理归纳(一、数据清洗之常用工具——numpy,pandas)
-
数据分析-pandas存储文本文件
-
Flutter之通过AnimationController源码分析学习使用Animation
-
Laravel 5框架学习之向视图传送数据(进阶篇)_PHP
-
Laravel 5框架学习之向视图传送数据(进阶篇),laravel框架_PHP教程
-
深度学习,分割后处理之连通成分分析-Connected-Components
-
python数据分析库:numpy与pandas使用讲解