数据分析之pandas学习

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_44205272/article/details/102488466

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())

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

猜你喜欢

转载自blog.csdn.net/qq_44205272/article/details/102488466