在Python中附加数据

时间:2017-03-14 12:46:51

标签: arrays python-2.7 numpy

我有尺寸(95,)的时间数据。我编写了以下代码来提取年,月和日以创建维度数组(95,3)。但是,以下代码能够创建维度数组(285,)。如何使用维度(95,3)创建新的时间数组,其中第一列表示年份,第二列表示月份,最后一列表示当天。

newtime = np.array([])
for i in range(len(time)):
    a = seconds_since_jan_1_1993_to_datetime(time[i])
    time_year = float(a.strftime("%Y"))
    time_mon = float(a.strftime("%m"))
    time_day = float(a.strftime("%d"))
    newtime = np.append(newtime, np.array([time_year, time_mon, time_day]))

例如,我有一个带元素数组的输入数组([725696054.99044609,725696056.99082708,725696058.99119401,...])

我想要以下形式的输出:

Col1 Col2 Col3
2015.0 12.0 31.0
2015.0 12.0 31.0
2015.0 12.0 31.0

期待您的建议或帮助。

2 个答案:

答案 0 :(得分:0)

我的建议是采用数据帧格式。

您的代码可以轻松修复:

newtime = pd.DataFrame([], columns=['year','month','day'])

for i in range(len(time)):
    a = seconds_since_jan_1_1993_to_datetime(time[i])
    time_year = float(a.strftime("%Y"))
    time_mon = float(a.strftime("%m"))
    time_day = float(a.strftime("%d"))
    newtime.loc[len(newtime)] = [time_year, time_mon, time_day]
希望有所帮助!

答案 1 :(得分:0)

数据框是一个不错的选择。但是,如果要保留数组,只需使用numpy的reshape()函数即可。这是一个示例代码:

import numpy as np

newtime = np.array([])

for i in range(12):
    # Dummy data generated here, using floats like in the original post
    time_year = float(2015.0)
    time_mon = float(1.0*i)
    time_day = float(31.0)
    newtime = np.append(newtime,np.array([time_year, time_mon, time_day]))

newtime = newtime.reshape((-1,3))

注意重塑函数中的参数:( - 1,3)将告诉numpy制作第二个维度3,自动计算第一个维度。现在,如果您打印newtime,您应该看到:

[[  2.01500000e+03   0.00000000e+00   3.10000000e+01]
 [  2.01500000e+03   1.00000000e+00   3.10000000e+01]
 [  2.01500000e+03   2.00000000e+00   3.10000000e+01]
 [  2.01500000e+03   3.00000000e+00   3.10000000e+01]
 [  2.01500000e+03   4.00000000e+00   3.10000000e+01]
 [  2.01500000e+03   5.00000000e+00   3.10000000e+01]
 [  2.01500000e+03   6.00000000e+00   3.10000000e+01]
 [  2.01500000e+03   7.00000000e+00   3.10000000e+01]
 [  2.01500000e+03   8.00000000e+00   3.10000000e+01]
 [  2.01500000e+03   9.00000000e+00   3.10000000e+01]
 [  2.01500000e+03   1.00000000e+01   3.10000000e+01]
 [  2.01500000e+03   1.10000000e+01   3.10000000e+01]]