pandas时间序列复习

#### 1.将Date这个列转换为datetime类型
apple['Date']=pd.to_datetime(apple['Date'])

apple=apple.set_index('Date')#设置date列为行索引

#判定行索引是否有重复,返回True代表数据唯一
apple.index.is_unique

#找出重复的数据:duplicated(),dateframe一行中所有的数据重复则认为是重复数据,重复行返回True
apple['Open'].duplicated()#返回apple中open列里面重复数据,指代第二次出现的为重复,第一次的不认为是重复

apple.sort_index(inplace=True)#对apple的行索引进行升序排列,inplace=True是表示在原表进行排序不生成新的对象

#找到每个月的最后一个交易日
S1=pd.DataFrame(np.arange(len(apple.index)),index=apple.index)#新生成一个dataframe
temp=S1.resample('BM').max()#用每个月的最后一天进行重新采样
apple[apple.index.isin(temp.index)]#表示找出apple表中对应的日期的行

def fin(x):
    return x.iloc[-1]
apple.resample('BM').apply(fin)#对apple进行月最后一天工作日采样后返回每月的最后一个日期,apply是利用函数对前面的对象进行应用

#最早的日期和最晚的日期差多少天
print(apple.index.max()-apple.index.min())

#在数据中一共有多少个月
len(apple.resample('M').count())

#将dataframe中某列值下移一个单元格
df['close'].shift(1)     -1则为上移一个单元格

#时间索引进行切片操作
df['2010-01':'2020-02']

#取出每个月的第一个/最后一个日期
df.resample('M').first()        df.resample('M').last() 

#取dataFrame中的某一列可以使用用取得属性的方式获取
euro12.Team

#获得dataframe中的形状可以看多少行多少列
euro12.shape

#取多列数据
euro12[['Team','Yellow Cards','Red Cards']]

#对数据进行排序,按照多个列
displine.sort_values(['Red Cards','Yellow Cards'],ascending=[False,True])
先按照红牌降序排列再按照黄牌升序排列

#对黄牌列求平均值且保留两位小数
round(displine['Yellow Cards'].mean(),2)

#取出分数大于6分的数据
euro12[euro12.Goals>6]

#取出team列中名字以G开头的数据
euro12[euro12.Team.str.startswith('G')>6]

#返回数据的描述性统计值
drinks.groupby('continent').wine_servings.describe()

#同时返回某一列的中位数、平均值,最小值,使用agg进行聚合操作drinks.groupby('continent').spirit_servings.agg(['median','mean','min'])

#缺失值的处理,fillna()
df['Age'].fillna(mean)#用平均值填充

#用apply将对应内容进行替换

def sex_value(Sex):

    if Sex=='male':

        return 1

    else:

        return 0

df['Sex'].apply(sex_value)

#采用map函数,内容输入字典,对相应值进行替换
df.Sex=df.Sex.map({'male':1,'female':0})

#定义几个常用的方法

#按照xx对乘客进行分组,计算每组的人数
def xx_group_all(df,xx):
    #按照xx对乘客进行分组后 ,每个组的人数
    return df.groupby(xx)['PassengerId'].count()

#计算每个组的生还率
def group_passenger_survived_rate(xx):
    #按xx对乘客进行分组后每个组的人数
    group_all=xx_group_all(df,xx)
    #按xx对乘客进行分组后每个组生还者的人数
    group_survived_value=xx_group_all(survives_passenger_df,xx)
    #按xx对乘客进行分组后,每组生还者的概率
    return group_survived_value/group_all

#输出饼图
def print_pie(group_data,title):
    group_data.plt.pie(title=title,figsize=(6,6),autopct='%.2f%%'\
                      ,startangle=90,legend=True)
    
    
#输出柱状图
def print_bar(data,title):
    bar=data.plot.bar(title=title)
    for p in bar.patches:
        bar.annotate('%.2f%%'%(p.get_height()*100),(p.get_x()*1.005\
                     ,p.get_height()*1.005))
#bar.patches,这里存储了柱状图中柱子的信息,使用bar.annotate()对柱子增加描述性信息,用get_heigeht获取高度,转化为浮点数的百分比,用%将后面的信息进行转化,将x的值左移1.005.高度高1.005

# value_counts探索某列中各元素值出现的次数(只能探索某列的)

# count 计算每列或每行的非NA单元格。

df['第一产业增加值'].value_counts().head()

# unique()函数用于获取Series对象的唯一值。唯一性按出现顺序返回。基于哈希表的唯一,因此不排序

print("唯一值:/n",df['国内生产总值'].unique())

# nunique唯一值得数量

print("/n唯一值的数量:/n",df['国内生产总值'].nunique())

## 探索每一列缺失值数量

print("探索每一列缺失值数量:/n",df.isnull().sum())

# 不是缺失值数量

print("/n不是缺失值数量:/n",df.notnull().sum())

# 每一列求和

print('每一列求和:/n', df.sum())  

# 某列逐行累加(可以全部样本每一列都累加)

print(df.cumsum().head())

# 返回 '国内生产总值' 列最大、最小值所对应的索引号

print('/n>>>', df['国内生产总值'].idxmax(), '/n', df['国内生产总值'].idxmin())

# 汇总统计信息,是上面方法的统一

print('/n>>>', df.describe().T)  

for (columnName, columnData) in df1.items():
    print('Colunm Name : ', columnName) 
    print('Column Contents : ', columnData.values) 

遍历df1中所有列,返回对应的列名及列的内容的列表
# replace允许或不允许对同一行进行多次采样,默认就是False
data = df.sample(n=5, replace=False)  # 不放回随机抽样 5 个数据
data

随机抽样
data2 = df['地区'].apply(lambda x: x + 'QQ')
data2.head()

data3 = df.iloc[:, :].apply(np.sum)
data3.head()
#通常用来连接DataFrame对象。默认情况下是对两个DataFrame对象进行纵向连接, 
# 当然通过设置参数,也可以通过它实现DataFrame对象的横向连接
df_1 = pd.concat(objs=[df1, df2, df3])  # 合并数据,以行的维度合并
df_1.sample(n=7, replace=False)  # 随机不放回抽样 7 个数据

合并数据
# 查找重复值
print('>>>/n', df_1.duplicated(subset=['年份'], keep='first').head())  

# 删除重复值
print('>>>/n', df_1.drop_duplicates(subset=['年份'], keep='first', inplace=False).iloc[:, :4])

# 查找重复索引
print('/n>>>', df_1.index.duplicated())

# 第二种方法,两种方法是等效的
df_1.groupby(by=['地区'], as_index=True).年份.agg(['max', 'min', 'median']).head()
as_index为True时将[‘地区’]作为索引输出,默认为false,索引为123

print('/n>>>/n', df1.fillna(method='ffill').head())  # 使用缺失值的前一个值填充(前向填充)
print('>>>/n', df1.fillna(method='bfill').head())  # 使用缺失值的后一个值填充(后向填充)

# 选择任一值大于1000的列
df1.loc[:, (df1>10000).any()]

# 选择所有值大于1000的列
df1.loc[:, (df1>1000).all()] 

df_1.loc[:, df_1.isnull().any()]  # 选择含 NaN值的列

df_1.loc[:, df_1.notnull().all()]  # 选择不含NaN值的列

#### query和filter

在使用pandas进行数据分析时,经常遇到需要过滤信息的场景,此时我们可以用到2种函数,query和filter。

#### query函数

    query函数我认为类似sql语言中的where,可以对dataframe中的特定column进行筛选。具体语法如下:

    df.query('列名   判断   值'),如df.query('column1 > 2 and column 2<1')

df1.query('在岗职工平均工资>5000 and 国内生产总值>16538' )

    等于

    df[df[列名] 判断 值],如 df[df[column1]>2 & df[column2]<1]

#### filter函数

    filter常规用法,在pandas说明里很好找到:

    DataFrame.filter(items=None, like=None, regex=None, axis=None)

    #items对列进行筛选#regex表示用正则进行匹配#like进行筛选#axis=0表示对行操作,axis=1表示对列操作

# 选择指定的列,类似于 df[['某列', '某列']]

df_1.filter(items=['地区', '年份'])  # 选择指定的列

df_1.filter(like='产业', axis=1)  # 选择含有 "产业" 的列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值