数据分析系列 之pandas用例分析1

本文介绍了pandas库在时间序列数据预处理中的应用,包括时间归一化、按关键词A进行聚合分析,以实际案例演示了如何读取CSV文件、格式化时间并利用GroupBy操作。涵盖了pandas的基本数据结构、文件读写、lambda函数和Python整数除法等内容。

1 pandas介绍:
pandas是基于NumPy的一种工具,它是python的一个数据分析包,最初由AQR Capital Management于2008年4月开发,并于2009年底开源出来,目前由专注于Python数据包开发的PyData开发team继续开发和维护,属于PyData项目的一部分。常用数据结构有:
Series:一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近;
DataFrame:二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器;
Panel :三维的数组,可以理解为DataFrame的容器。

2 用例分析:
将时间序列的数据进行时间归一化,并且按照时间和关键字段A进行聚合分析。用例数据为:

timekeywordaddinformation
4/3/2021 00:00:06AB

3 参考代码为:

df1=pd.read_csv('AAA.csv',encoding='utf-8')  #读取文件
df2=pd.to_datetime(df1['time']).dt.strftime('%Y-%m-%d %H:%M')  #时间格式化
val = []   #定义临时变量

#时间归一化
for x in df2:
    minu=x[-2:]
    y=int(minu)//5*5
    if y<10:
        minustr='0'+str(y)
    else:
        minustr=str(y)
    hour=x[-5:-3]
    dtt=x[0:10]
    dt=dtt+" "+hour+":"+minustr
    val.append(dt)
df1['newtime']=val

##
中间省略其余代码
##

#按照时间和关键字段A进行聚合分析
df3=df1.groupby(['time','keyword'],as_index = True).agg(lambda x: list(x))
df4=pd.DataFrame(df3)
#将结果写入到csv中
df4.to_csv('result.csv',sep='^')

4 补充资料:
(1) pandas中对于文件的读写:
对于文本文件,支持csv, json等格式,当然也支持tsv文本文件;对于二进制文件,支持excel,python序列化文件,hdf5等格式;此外,还支持SQL数据库文件的读写。
和R语言类似,对于文本文件的读写,都提供了一个标准的read_table函数,用于读取各种分隔符分隔的文本文件:

a = pd.read_csv('test.csv')

#sep参数指定分隔符,默认为逗号
pd.read_csv('test.csv', sep = "\t")

将DataFrame对象输出为csv文件的函数以及常用参数如下:

a.to_csv("test1.csv")

(2) pandas.groupby()函数:
大多数的Pandas.GroupBy() 操作主要涉及以下的三个操作,该三个操作也是pandas. GroupBy()的核心,分别是:
第一步:分离(Splitting)原始数据对象;
第二步:在每个分离后的子对象上进行数据操作函数应用(Applying);
第三步:将每一个子对象的数据操作结果合并(Combining)。
如:自己创建用于演示的数据:

import pandas as pd 
import numpy as np
# 生成测试数据
test_data = {'Team': ['A', 'A', 'B', 'B', 'C','D', 'D', 'D', 'A', 'E', 'E', 'A'],
             'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
             'values01':[876,789,863,673,741,812,756,788,694,701,804,690],
             'values02': [120, 208, 250, 330, 430,240 ,710 ,190,252 , 364,197,288]}
test_dataest = pd.DataFrame(test_data)

按照Team列进行分组:

grouped = test_dataest.groupby('Team')

对多列数据进行Applying操作,同样还是计算和(sum):

grouped2 = test_dataest.groupby(["Team","Year"]).aggregate(np.sum)

(3) lambda函数介绍:
lambda叫做匿名函数,是一种不需要提前对函数进行定义再使用的情况下就可以使用的函数,定义规则:冒号的左边是原函数的参数,右边是原函数的返回值。
如:

def func(x):
	return x+1

使用lambda表达式,一步实现:

a = lambda x:x+1

(4) Python中的 // 与 / 的区别:
" / " 表示浮点数除法,返回浮点结果;
" // " 表示整数除法,返回不大于结果的一个最大的整数(向下取整)。

(5) python中x[:],x[:-1],x[:,]x[:,-1]等操作含义解析:
如:x=[1,2,3,4,5,6]
x[:] 冒号左侧表示开始位置,右侧表示结束位置

x[:] 
[1,2,3,4,5,6]

x[1:]打印开始第二个到最后

x[1:] 
[2,3,4,5,6]

x[:-1]打印开始到倒数第二个

x[:-1] 
[1,2,3,4,5]

(6) pandas中drop和drop_duplicates 用法:
删除表中的某一行或者某一列更明智的方法是使用drop,它不改变原有的df中的数据,而是返回另一个dataframe来存放删除后的数据。
drop函数默认删除行,列需要加axis = 1:

print frame.drop(['a'])
print frame.drop(['Ohio'], axis = 1)

drop_duplicates(subset=’ 列名’,keep=‘firsrt’,inplace=‘True’)函数是删除DataFrame的某列中重复项的函数。

参考资料:
https://blog.youkuaiyun.com/weixin_43569478/article/details/108079880 使用pandas进行文件读写
https://my.oschina.net/u/4581316/blog/4943582 pandas.groupby()函数介绍
https://blog.youkuaiyun.com/stay_foolish12/article/details/107160831 lambda函数+map函数的结合使用
https://blog.youkuaiyun.com/qq_34621022/article/details/103558098?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control python中x[:],x[:-1],x[:,]x[:,-1]等操作含义解析
https://blog.youkuaiyun.com/nuaadot/article/details/78304642 python进行数据处理——pandas的drop函数
https://blog.youkuaiyun.com/csefrfvdv/article/details/100770965 pandas中drop_duplicates 用法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值