[英]Python CSV data analysis based on date time
我有一個很大的CSV文件,我們將使用該文件將資產導入到資產管理數據庫中。 這是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的1/5/15。
這基本上是我需要獲得的:
“序列號2LMXK1的機芯類型為301,最后更新時間為1/5/15 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分析和處理數據。
Pandas是一個有用的庫,不僅可以讀取csv文件。 實際上,您根本不需要這里的csv庫(您發布的代碼示例中沒有使用它)
首先,您需要使用read_csv
函數的parse_dates
參數確保將日期作為日期讀入。 然后,您可以使用熊貓的分組功能 。
# 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
旁注:Pandas應該能夠為您讀取列標題,因此您不需要usecols
參數
dict的創建或對列表進行排序的最佳方法在某種程度上取決於您想要的內容,但對於事物的解析方面,是將字符串轉換為日期對象,以便隨后進行理智的比較,例如,您可能希望在datetime中使用datetime模塊(是的, 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
(請注意,在談到零填充時,是為了輸出 。它將很好地解析非零填充的數字)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.