将pandas dataframe列映射到矩阵

2024-09-30 05:23:37 发布

您现在位置:Python中文网/ 问答频道 /正文

以下操作

import pandas as pd
import numpy as np
data = pd.read_csv(fname,sep=",",quotechar='"')

将创建一个650000 x 9数据帧。第一列包含日期,下面的设计是为了将一个日期戳转换为5个单独的特性。在

^{pr2}$

我想把这5个值赋给650000x7的np矩阵。在

xtrn = np.zeros(shape=(data.shape[0],7))
xtrn[:,0:4] = np.asarray(data["Dates"].map(timepartition)) 
#above returns error ValueError: could not broadcast input array from shape (650000) into shape (650000,4)

Tags: csv数据importnumpypandasreaddataas
3条回答

应用于dataframe的map函数映射到一个新的series对象,通过返回元组,它将作为对象系列返回。在

另一种方法是:。在

对timepartition进行以下更改:

def timepartition(elm):
    tm = time.strptime(elm,"%Y-%m-%d %H:%M:%S")
    return [tm[i] for i in range(5)]

这将返回元组的列表。下面的代码将从具有所需维度的数据帧系列中创建一个矩阵,并将其映射到xtrn。在

^{pr2}$

np-matrix将从嵌套的列表中推断出一个矩阵,将数据的分区函数应用于序列的列表表示,在本例中这是平面的。在

您可以尝试使用一些内置的pandas功能。在

dates = pd.to_datetime(data['Dates'])
date_df = pd.DataFrame(dict(
    year=dates.dt.year,
    month=dates.dt.month,
    day=dates.dt.day,
    # etc.
))
xtrn[:, :5] = date_df.values  # use date[['year', 'month', 'day', etc.]] if the order comes out wrong

以下是对我有用的。我不确定哪种方法更快,但我更容易从逻辑上理解发生了什么。这里我的数据集“犯罪”是你的“数据”,我们的时间格式有点不同。在

def timepartition(elm):
    tm = time.strptime(elm,"%m/%d/%Y %H:%M:%S %p")
    return tm[0:5]

zeros = np.zeros(shape=(crimes.shape[0],3), dtype=np.int)
dates = np.array([timepartition(crimes["Date"][i]) for i in range(0,len(crimes))])
new = np.hstack((dates,zeros))

相关问题 更多 >

    热门问题