pandas的基本使用方法

本文用于学习pandas模块的基本使用方法!!!

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)

'''
数据结构:Series
Series:由numpy数据类型和与之对应的索引组成
'''
#创建Series数据结构
obj = Series([3,2,1])
print(obj)

#获得Series数据结构对象的数据和索引
print(obj.values)
print(obj.index)

#获得唯一值组成的数组
print(obj.unique())

#获得各值出现的频率
print(obj.value_counts())

#判断缺失数据 True表示缺失
obj = Series([1,np.nan,2,np.nan,3,np.nan])

print(obj.isnull())
print(isnull(obj))
print(notnull(obj))
print(obj.notnull())

#删除缺失值
print(obj.dropna())
print(obj[obj.notnull()])

#对数据标记索引
obj = Series([1,2,3,4],index=['a','b','c','d'])
#通过索引的方式获取值
print(obj['a'])

#根据新索引重排,如果索引值不存在,引入Nan
print( obj.reindex(['e','d','c','b','a']) )

#设置缺失值为0
print( obj.reindex(['e','d','c','b','a'],fill_value = 0) )

#numpy的数组运算
print(obj*2)

#删除指定索引对应的值
print( obj.drop('a') )

#索引的选取和过滤
print(obj['a'])
print(obj[1])
print(obj[2:4])
print(obj[[2,3]])
print(obj[obj>1])
print(obj['b':'c'])

#通过字典创建Series
data = {'name':'yu','age':23}
obj = Series(data)
print(obj)

#找到data中跟states索引相匹配的值,没找到则为空值
states = ['name','b','c']
obj = Series(data,index = states)
print(obj)

#在算术运算中自动对齐索引
print(obj + obj)

#对对象本身或者索引设置name
obj.name = 'people'
obj.index.name = 'index'
print(obj)

#修改对象的索引
obj.index = ['e','f','g']
print(obj)


'''
数据结构:DataFrame
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())

参考资料:

1.《利用Python进行数据分析》

猜你喜欢

转载自blog.csdn.net/attitude_yu/article/details/80751734