簡體   English   中英

有效地拆分一列numpy數組

[英]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的生成:

  1. 將datetime字符串轉換為datetime對象:

     datetimes = [datetime.strptime(d, "%m/%d/%Y %H:%M") for d in data[:, 1]] 

    我假設您from datetime import datetime

  2. 收集每個日期時間對象的年,周日和小時。

     yearWeekdayHour = [[dt.year, dt.weekday(), dt.hour] for dt in datetimes] 
  3. 將所有部分水平堆疊在一起:原始data的第一列,日期和時間信息以及data的最后一列。

     newdata = np.hstack((data[:, 0, None], yearWeekdayHour, data[:, 2:])) 

    請注意,第一列用附加的None索引,以獲取2D數組,這是水平堆疊所必需的。


我不太確定這是否是更好的解決方案。 您的可讀性可能更高,尤其是對於不完全熟悉所有Python列表理解的用戶。 但這可能是值得閱讀和嘗試的替代方法。 它可能是一個非常強大的工具。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM