2016-02-16 32 views
0

我有一個很大的CSV文件,我們將使用它來將資產導入我們的資產管理數據庫。這裏是CSV數據的一個小例子。基於日期時間的Python CSV數據分析

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文件,併爲每一個唯一的序列號,以具有運動型最新的「發佈日期」。

作爲示例,對於序列號2LMXK1,最新的發佈日期/時間爲14:00至15/15。

這裏基本上是我需要獲得:

「序列號2LMXK1具有運動型301和最後更新15年1月5日14:00」。

我已經開始解析CSV文件並創建字典的一些代碼。

#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來分析和處理數據。

回答

3

熊貓是一個有用的庫不僅僅是閱讀csv文件。實際上,這裏根本不需要csv庫(它不在您發佈的代碼示例中使用)

首先,您需要確保日期以日期形式讀取,方法是使用參數parse_dates功能read_csv。然後你可以使用熊貓'grouping functionality

# 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行迭代:

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'])) 

將產生如下:

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參數

+0

很好的回答!我不認爲這可以用更少的代碼行來完成。值得注意的是,「sort_values」被添加到了熊貓0.17 –

+0

@FrancescTorradeflot這是事實。我想,早期版本的熊貓有一個排序功能,可以做同樣的事情。較新的版本抱怨說有人貶值。 – Jezzamon

1

字典創建或對列表進行排序的最佳方式取決於你想要的東西,但對於事物的解析方面,將字符串轉換爲日期對象,這樣你就可以進行理智的比較等等,你可能想要日期時間模塊中的日期時間(是的,datetime.datetime

它有一個strptime()函數,將恰恰如此:

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

(注意,它在哪裏談論零填充,這是爲輸出。它會解析非零填充數字罰款)