###series介绍
#一种类似于以为数组的对象,由一组数据和一组与之相关的数据标签(索引)组成。
import pandas as pd
pd.Series([2,3,4,5])
sr = pd.Series([2,3,4,5],index=['a','b','c','d'])
pd.Series(np.arange(5))
sr[0] #索引和标签都可以作为索引
sr+2
sr+sr #相同大小的加减乘除
sr[0:2] #切片
#通用函数
np.abs(sr)
#布尔型索引
sr[sr>0]
sr = pd.Series({'a':1,'b':2})
sr
sr[0]
'a' in sr
'c' in sr
for i in sr:
print(i) #输出的是值,并非索引
sr.index
sr.index[0]
sr.values
sr = pd.Series([1,2,3,4],index=['a','b','c','d'])
sr[['a','c']]
sr['a':'c'] #通过标签切片,前包后也包
######整数索引
#如果索引是整数类型,则根据整数进行下标获取值时总是面向标签的
#解决方法:loc属性(将索引解释为标签)和iloc属性(将索引解释为下标)
sr = pd.Series(np.arange(20))
sr
sr2 = sr[10:].copy()
sr2
sr2[10]
sr2.loc[10] #10为标签
sr2.iloc[9] #9为索引
#####数据对齐
sr1 = pd.Series([12,23,34],index=['c','a','d'])
sr2 = pd.Series([21,32,43],index=['a','d','c'])
sr1+sr2
##pandas在进行两个Series对象的运算时,会按标签进行对齐然后计算。
sr1 = pd.Series([12,23,34],index=['c','a','d'])
sr2 = pd.Series([21,32,43,11],index=['a','d','c','b'])
sr1+sr2
#b为缺失值NaN
sr1 = pd.Series([12,23,34],index=['c','a','d'])
sr2 = pd.Series([21,32,43],index=['a','b','c'])
sr1+sr2
sr1.add(sr2)
sr1.add(sr2,fill_value=0) #填充
##########Series缺失值的处理
sr=sr1+sr2
sr.isnull()
sr.notnull()
#扔掉缺失值
sr[sr.notnull()]
sr.dropna()
#填充缺失值
sr.fillna(0)
sr.fillna(sr.mean()) #默认跳过nan值,不需要考虑nan的数量
#######dataframe
#dataframe是一个表格型的数据结构,含有一组有序的列。#
#dataframe可以被看作是由Series组成的字典,并且共有一个索引
#DataFrame的创建
df = pd.DataFrame({'one':[1,2,3],'two':[4,5,6]},index=['a','b','c'])
pd.DataFrame({'one':pd.Series([1,2,3],index=['a','b','c']),
'two':pd.Series([1,2,3,4],index=['a','b','c','d'])})
df = pd.DataFrame({'one':pd.Series([1,2,3,5],index=['a','b','c','e']),
'two':pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])})
pd.read_csv('/Users/terry/Desktop/data/text.csv')
df.index
df.values
#NaN是特殊的浮点值
#转置后,一列都会变成统一的变量类型
df.T
df.columns
#获取快速统计
df.describe()
#####DataFrame索引和切片
df['one']['a'] #先列后行
df.loc['a','one']
df['one']
df.loc['a',]
df.loc['a',:]
df.loc[['a','c'],'two']
#########DataFrame数据对齐与缺失数据处理
#DataFrame对象在运算时,同样会进行数据对齐,其行索引和列索引分别对齐
df2 = pd.DataFrame({'two':[1,2,3,4],'one':[4,5,6,7]},index=['c','d','b','a'])
df
df2
df+df2
df.fillna(0)
df.dropna()
df.loc['d','two']=np.nan
df.loc['c','two']=np.nan
df
df.dropna(how='all') #默认参数是any
df2.loc['c','two']=np.nan
df2.dropna(axis=1)
df.mean() #长度为2的series对象
df.mean(axis=1) #对行求平均
df.sum()
df.sum(axis=1)
df.sort_values(by='one')
df.sort_values(by='one',ascending=False) #降序,默认为生序
df.sort_values(by='a',ascending=False,axis=1)
df.sort_index()
df.sort_index(ascending=False,axis=1)
#########时间处理对象
import datetime
datetime.datetime.strptime('2010-01-01','%Y-%m-%d')
import dateutil
dateutil.parser.parse('2010-01-01')
pd.to_datetime(['2010-01-01','2010-Feb-02'])
######时间对象生成
pd.date_range('2010-01-01','2010-05-01')
pd.date_range('2010-01-01',periods=60)
pd.date_range('2010-01-01',periods=60,freq='H') #W周,W-MON每周一,B工作日
dt = pd.date_range('2010-01-01',periods=60) #生成的每个值都为类似时间戳
dt[0].to_pydatetime() #可以转换为python库中的时间对象
######时间序列
pd.date_range('2010-01-01','2010-05-01')
sr = pd.Series(np.arange(100),index=pd.date_range('2018-01-01',periods=100))
sr
sr['2018-03']
sr['2018':'2018-03']
sr.resample('W').sum()
sr.resample('M').mean()
sr.truncate(before='2018-02-03') #保留切之后的
sr.truncate(after='2018-02-03') #保留切之前的
########文件读取
pd.read_csv('/Users/terry/Downloads/'+
'数据分析课件资料/FinanceAnalysis/601318.csv')
pd.read_csv('/Users/terry/Downloads/'+
'数据分析课件资料/FinanceAnalysis/601318.csv',
index_col=0)
#此时时间为字符串
pd.read_csv('/Users/terry/Downloads/'+
'数据分析课件资料/FinanceAnalysis/601318.csv',
index_col='date')
#将时间字符串改成时间序列,true为自行查找可以作为时间序列的值,并且转换
pd.read_csv('/Users/terry/Downloads/'+
'数据分析课件资料/FinanceAnalysis/601318.csv',
index_col='date',parse_dates=True)
pd.read_csv('/Users/terry/Downloads/'+
'数据分析课件资料/FinanceAnalysis/601318.csv',
index_col='date',parse_dates=['date'])
####若果csv文件中没有列名,第一行会自动转换为列索引
pd.read_csv('/Users/terry/Downloads/'+
'数据分析课件资料/FinanceAnalysis/601318.csv',header=None)
pd.read_csv('/Users/terry/Downloads/'+
'数据分析课件资料/FinanceAnalysis/601318.csv',
header=None,
name=list('abcdefgh'))
#############文件操作