[英]Efficiently splitting a column of numpy array
我有一個包含5列的csv文件,其中第二列以10/22/2001 14:00
格式表示。 我要創建另一個文件,這次數據分為不同的列。 為了拆分列,我在python中使用了以下代碼
from numpy import loadtxt
import numpy as np
from time import strptime
filename = 'data/file.csv'
data = loadtxt(filename, delimiter=',', dtype=str, skiprows=1)
newdata = np.zeros((data.shape[0],7))
newdata[:,0] = data[:,0]
for i in range(len(data[:,1])):
tm = strptime(data[i,1], "%m/%d/%Y %H:%M")
newdata[i,1] = tm.tm_year
newdata[i,2] = tm.tm_wday
newdata[i,3] = tm.tm_hour
newdata[:,4:] = data[:,2:]
有沒有更好的方法使用numpy方法或其他python模塊來做到這一點?
您可以使用以下三行代碼來縮短newdata
的生成:
將datetime字符串轉換為datetime對象:
datetimes = [datetime.strptime(d, "%m/%d/%Y %H:%M") for d in data[:, 1]]
我假設您from datetime import datetime
。
收集每個日期時間對象的年,周日和小時。
yearWeekdayHour = [[dt.year, dt.weekday(), dt.hour] for dt in datetimes]
將所有部分水平堆疊在一起:原始data
的第一列,日期和時間信息以及data
的最后一列。
newdata = np.hstack((data[:, 0, None], yearWeekdayHour, data[:, 2:]))
請注意,第一列用附加的None
索引,以獲取2D數組,這是水平堆疊所必需的。
我不太確定這是否是更好的解決方案。 您的可讀性可能更高,尤其是對於不完全熟悉所有Python列表理解的用戶。 但這可能是值得閱讀和嘗試的替代方法。 它可能是一個非常強大的工具。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.