【问题标题】:Pandas Cannot Create a DataFrame from a Numpy Array Of TimestampsPandas 无法从 Numpy 时间戳数组创建 DataFrame
【发布时间】:2016-05-25 18:47:47
【问题描述】:

我有一个 numpy 的 Pandas 时间戳数组:

array([[Timestamp('2016-05-02 15:50:00+0000', tz='UTC', offset='5T'),
        Timestamp('2016-05-02 15:50:00+0000', tz='UTC', offset='5T'),
        Timestamp('2016-05-02 15:50:00+0000', tz='UTC', offset='5T')],
       [Timestamp('2016-05-02 17:10:00+0000', tz='UTC', offset='5T'),
        Timestamp('2016-05-02 17:10:00+0000', tz='UTC', offset='5T'),
        Timestamp('2016-05-02 17:10:00+0000', tz='UTC', offset='5T')],
       [Timestamp('2016-05-02 20:25:00+0000', tz='UTC', offset='5T'),
        Timestamp('2016-05-02 20:25:00+0000', tz='UTC', offset='5T'),
        Timestamp('2016-05-02 20:25:00+0000', tz='UTC', offset='5T')]], dtype=object)

我无法从该数组创建 DataFrame,因为尝试这样做会引发以下错误:

AssertionError: Number of Block dimensions (1) must equal number of axes (2)

您可以看到数组显然是二维的,我使用ndim 验证了这一点。

为什么我不能创建 DataFrame?

【问题讨论】:

    标签: python arrays numpy pandas dataframe


    【解决方案1】:

    我认为你可以使用list理解:

    import pandas as pd
    import numpy as np
    
    a =np.array([[pd.Timestamp('2016-05-02 15:50:00+0000', tz='UTC', offset='5T'),
            pd.Timestamp('2016-05-02 15:50:00+0000', tz='UTC', offset='5T'),
            pd.Timestamp('2016-05-02 15:50:00+0000', tz='UTC', offset='5T')],
           [pd.Timestamp('2016-05-02 17:10:00+0000', tz='UTC', offset='5T'),
            pd.Timestamp('2016-05-02 17:10:00+0000', tz='UTC', offset='5T'),
            pd.Timestamp('2016-05-02 17:10:00+0000', tz='UTC', offset='5T')],
           [pd.Timestamp('2016-05-02 20:25:00+0000', tz='UTC', offset='5T'),
            pd.Timestamp('2016-05-02 20:25:00+0000', tz='UTC', offset='5T'),
            pd.Timestamp('2016-05-02 20:25:00+0000', tz='UTC', offset='5T')]], dtype=object)
    
    df = pd.DataFrame([x for x in a], columns=['a','b','c'])
    print (df)
                              a                         b  \
    0 2016-05-02 15:50:00+00:00 2016-05-02 15:50:00+00:00   
    1 2016-05-02 17:10:00+00:00 2016-05-02 17:10:00+00:00   
    2 2016-05-02 20:25:00+00:00 2016-05-02 20:25:00+00:00   
    
                              c  
    0 2016-05-02 15:50:00+00:00  
    1 2016-05-02 17:10:00+00:00  
    2 2016-05-02 20:25:00+00:00  
    

    另一种解决方案是DataFrame.from_records:

    print (pd.DataFrame.from_records(a, columns=['a','b','c']))
                              a                         b  \
    0 2016-05-02 15:50:00+00:00 2016-05-02 15:50:00+00:00   
    1 2016-05-02 17:10:00+00:00 2016-05-02 17:10:00+00:00   
    2 2016-05-02 20:25:00+00:00 2016-05-02 20:25:00+00:00   
    
                              c  
    0 2016-05-02 15:50:00+00:00  
    1 2016-05-02 17:10:00+00:00  
    2 2016-05-02 20:25:00+00:00  
    

    alternate constructors of df

    【讨论】:

    • 这绝对回答了我的问题,所以谢谢。我之所以问,是因为我遇到的最初问题是我试图转置时间戳的 DataFrame。即使使用from_records 构造DataFrame,转置也会像以前一样抛出AssertionError。现在,我在构造 DataFrame 之前转置了 numpy 数组。
    猜你喜欢
    • 1970-01-01
    • 2016-07-14
    • 2018-09-04
    • 2022-12-10
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多