【问题标题】:Appending data in Python在 Python 中附加数据
【发布时间】:2017-03-14 12:46:50
【问题描述】:

我有一个维度为 (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

期待您的建议或帮助。

【问题讨论】:

标签: arrays python-2.7 numpy


【解决方案1】:

我的建议是使用数据框格式。

对您的代码的一个简单修复是:

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]

希望有帮助!

【讨论】:

    【解决方案2】:

    数据框是一个不错的选择。但是,如果你想保留一个数组,你可以简单地使用 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))
    

    注意 reshape 函数中的参数:(-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]]
    

    【讨论】:

      猜你喜欢
      • 2019-03-22
      • 2022-01-03
      • 1970-01-01
      • 2014-05-13
      • 2021-11-19
      • 1970-01-01
      • 1970-01-01
      • 2014-03-28
      • 2011-09-24
      相关资源
      最近更新 更多