欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据分析之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())

以后将会继续更新博客,感谢大家的交流与关注