首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于日期时间的Python数据分析

基于日期时间的Python数据分析
EN

Stack Overflow用户
提问于 2016-02-16 22:14:23
回答 2查看 1.2K关注 0票数 1

我有一个很大的CSV文件,我们将使用它将资产导入我们的资产管理数据库。下面是CSV数据的一个较小的示例。

代码语言:javascript
运行
复制
Serial number,Movement type,Posting date
2LMXK1,101,1/5/15 9:00
2LMXK1,102,1/5/15 9:30
2LMXK1,201,1/5/15 10:30
2LMXK1,202,1/5/15 13:00
2LMXK1,301,1/5/15 14:00
JEMLP3,101,1/6/15 9:00
JEMLP3,102,1/7/15 10:00
JEMLP3,201,1/7/15 13:30
JEMLP3,202,1/7/15 15:30
JEMLP3,203,1/7/15 17:30
BR83GP,101,1/5/15 9:00
BR83GP,102,1/5/15 13:00
BR83GP,201,1/6/15 9:00
BR83GP,202,1/7/15 15:30
BR83GP,301,1/5/15 13:00
BR83GP,201,1/6/15 9:00
BR83GP,301,1/9/15 15:30

以下是要求:“每个序列号的最新移动类型是什么?”

我需要解析CSV文件和每个唯一的序列号,采取移动类型,有最新的“张贴日期”。

例如,对于序列号2LMXK 1,最新的投递日期/时间是14:00的1/5/15。

以下是我需要获得的基本信息:

序列号2 2LMXK1 1的移动类型为301,最后一次更新为1/5/15 14:00。

我从一些解析CSV文件并创建字典的代码开始。

代码语言:javascript
运行
复制
#Import modules
import csv
import pandas as pd

fields = ['Serial number','Movement type','Posting date']

df = pd.read_csv('import.csv', skipinitialspace=True, usecols=fields)
dc = df.to_dict()

#print (df['Serial number'])

for value in dc.items():
    print (value)

这段代码可以解析CSV并创建一个字典。

然而,我需要在日期比较和过滤技术方面的帮助。如何创建另一本只列出最新发布日期的唯一序列号的词典?一旦我创建了一个新的过滤数据字典,我可以使用它导入我们的资产管理数据库。我的想法是,在导入到我们的系统之前,我将使用python来分析和操作数据。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-16 23:03:00

熊猫不仅仅是一个阅读csv文件的有用的图书馆。实际上,这里根本不需要csv库(在您发布的代码示例中没有使用它)

首先,您需要使用parse_dates函数的read_csv参数,确保将日期读入为日期。然后你可以使用熊猫的分组功能

代码语言:javascript
运行
复制
# parse the 3rd column (index 2) as dates
df = pd.read_csv('import.csv', skipinitialspace=True, usecols=fields, parse_dates=[2])
last_movement = df.sort_values('Posting date').groupby('Serial number').last()

要创建所需的字符串,可以迭代last_movement的行。

代码语言:javascript
运行
复制
for index, row in last_movement.iterrows():
    print('Serial Number {} has a movement type {} and was last updated {}'
          .format(index, row['Movement type'], row['Posting date']))

这将产生以下情况:

代码语言:javascript
运行
复制
Serial Number 2LMXK1 has a movement type 301 and was last updated 2015-01-05 14:00:00
Serial Number BR83GP has a movement type 301 and was last updated 2015-01-09 15:30:00
Serial Number JEMLP3 has a movement type 203 and was last updated 2015-01-07 17:30:00

附带注意:熊猫应该能够为您读取列标题,所以您不需要usecols参数

票数 3
EN

Stack Overflow用户

发布于 2016-02-16 23:02:00

dict的创建或列表排序的最佳方式在一定程度上取决于您想要的是什么,但是对于事物的解析方面,将字符串转换为date对象,这样您就可以进行正常的比较了等等,您可能希望在datetime中使用datetime模块(是的,datetime.datetime)。

它有一个strptime()函数,它将精确地完成这个任务:

代码语言:javascript
运行
复制
import datetime
datetime.datetime.strptime(r"1/5/15 13:00", "%d/%m/%y %H:%M")
# I've assumed you have a Day/Month/Year format

唯一奇怪的地方是格式说明符,这里有文档说明:

https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior

(请注意,在谈到零垫子的地方,这是为了输出。它可以很好地解析非零填充数)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35444052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档