本文用于学习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进行数据分析》