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参数可以保持原来的列