数据分析之Pandas

基础

from pandas import Series, DataFrame
import pandas as pd
import numpy as np

states = ['California', 'Ohio', 'Oregon', 'Texas']
year = [2000, 2001, 2002, 2003]
value = [35000, 71000, 16000, 5000]
names = ['Bob', 'Steve', 'Jeff', 'Ryan']
i1 = ['one', 'two', 'three', 'four']
sdate = {'California':35000, 'Ohio':71000, 'Oregon':16000, 'Utah':5000}

obj = Series([4,7,-5,3],index=i1)  # Series的创建,若不指定index则默认是0,1,2,3
obj1 = Series(sdate)  # 也可由字典创建Series,键作为index
obj2 = Series(sdate, index=states)  # 指定index时,若字典中找不到对应值就会显示NaN

print(obj, obj1, obj2, sep='\n')
print(obj.values, obj1.index, sep='\n')

print(obj['two'], obj[['three', 'one', 'two']], obj.three, sep='\n')  # 类似字典的方法查看值,也可用属性的方法

obj1['Ohio'] = 50  # 可以直接更改值
print(obj1)
obj1.index = names  # 可以更改index
print(obj1)

obj1.name='income'  # name属性
obj1.index.name='names'
print(obj1)

print(obj[obj >2], obj1*2, sep='\n')  # 值可以进行运算
print(obj2.isnull(), obj2.notnull(), sep='\n')  # 查看值是否为空


data = {'states':states,'year':year,'income':value}  # 数组或列表构成的字典
pop = {'Ohio':{2000:1.5,2001:1.3,2003:1.4},'Texas':{2000:1.4,2001:1.3,2002:1.1}}  # 嵌套字典

frame = DataFrame(data,index=i1,columns=['year','states','income','debt'])  # 默认index为0,1,2,3,默认列会被自动排序,指定列不存在时值为NaN
frame2 = DataFrame(pop)

print(frame, frame2, frame.values, frame.columns, frame2.index, sep='\n')

print(frame['year'], frame[['year','states']], frame2.Ohio, sep='\n')  # 类似字典方式或者属性方式查看

frame.debt = np.arange(4) # 可直接赋值
print(frame)

frame.name = 'pop'  # name属性
frame.index.name = 'number'
frame.columns.name = 'state'
print(frame)

print(frame.loc[['one']], frame.iloc[[0,2,1]], sep='\n')  # .loc根据标签选取行,.iloc根据行号选行

print(frame2.reindex(index=[2002,2003,2004],columns=states,method='ffill'))  # reindex可以对行列进行重排,没有值得显式NaN,通过methon可以选定填充方式
print(frame2) # reindex创建出新的frame,原来的不改变

print(frame2[frame2['Texas']>1.2], frame2.loc[2001:2003,'Ohio'],sep='\n')

print(frame2.drop(2003))  # 删除一行或多行,创建新对象,原来的不改变

操作

from pandas import Series, DataFrame
import numpy as np


df1 = DataFrame(np.arange(9).reshape((3,3)),columns=list('abc'))
df2 = DataFrame(np.arange(20).reshape((4,5)),columns=list('abcde'))
s1 = Series(np.arange(3),index=list('abc'))


print(df1+df2, df1.add(df2, fill_value=0), sep='\n')  # DateFrame之间进行运算时会自动补齐,NaN代替无值,可以用fill_NaN提前设定,Series一样
print(df1-s1, df1.sub(df1.a, axis=0), df1-df1.a, sep='\n')
# DateFrame与Series运算时,Series的索引与DateFrame列索引相互补齐之后运算,通过axis调整运算方向,


df3 = DataFrame(np.random.randn(3,4),columns=list('dabc'),index=[2,0,1])
f = lambda x:x.max()-x.min()
def g(x):
    return Series([x.max(),x.min()],index=['Max','Min'])
print(df3, df3.apply(f,axis=1), df3.apply(g), sep='\n')  # apply可以使用自定义函数


print(df3.sort_index(), df3.sort_index(axis=1), df3.sort_index(ascending=False,by='b'),sep='\n')  # 对行或列索引排序,by指定列


obj = Series([7, -5, 7, 4, 2, 0, 4])
print(obj.rank(ascending=False, method='first'), df3.rank(axis=1, ascending=False, method='max'),sep='\n')  # 用rank进行排位


df4 = DataFrame(np.random.randn(4,4),index=list('abab'),columns=list('ccdd'))  # index可以重复
print(df4, df4.c, df4.loc['a'], df4.index.is_unique, sep='\n')  # 索引时得到所有对应值


df4.iloc[2,:]=np.nan
df4.iloc[0,3]=np.nan
print(df4, df4.sum(), df4.mean(axis=1), df4.mean(axis=1,skipna=False),sep='\n')
# 做统计运算时NaN会被自动排除,除非整行或列都是NaN,可以用skipna禁止跳过NaN


# Series1.corr(Series2),Series1.cov(Series2)  corr:相关系数  cov:协方差
# DataFrame.corr(), DateFrame.cov(), DateFrame1.corrwith(DateFrame2) 计算与自身的相关系数与协方差,corrwith计算与其他DateFrame的相关系数

# 缺失数据处理
# dropna(axis=1,how='all')  dropna()mor会滤除含有NaN的行,通过,axis,how指定滤除全为NaN的行或列
# fillna(value), fillna({column1:value1, column2:value2}), fillna(method='ffill',inplace=True)
# fillna填充NaN,可以输入值,字典,或者method,inplace不再创建新DateFrame,而是直接在原DateFrame上修改


df5 = DataFrame(np.random.randn(4,3),
                index=[list('aabb'),[1,2,1,2]],
                columns=[['Ohio','Ohio','Texas'],['Green','Green','Red']])  # 在每个轴上可以有多层索引
df5.index.name=['key1','key2']
df5.columns.name=['state','color']
print(df5, df5.swaplevel(0,1), sep='\n')
print(df5.sum(level=0))
# swaplevel交换索引位置,sortlevel对某个索引进行排序,通过level指定对某个索引进行统计
# set_index(drop=False)可以指定某列为索引,drop参数可以保持原来的列

 

你可能感兴趣的:(python,数据分析)