如何将时间戳数据帧转换为时间戳的 numpy 列表

How to convert a dataframe of Timestamps to a numpy list of Timestamps

我有一个如下所示的数据框:

df = pd.DataFrame(
                {
                    "timestamp1": [
                        pd.Timestamp("2021-01-01"),
                        pd.Timestamp("2021-03-01"),
                    ],
                    "timestamp2": [
                        pd.Timestamp("2022-01-01"),
                        pd.Timestamp("2022-03-01"),
                    ],
                })

我想将其转换为 numpy 数组列表,因此我得到如下内容:

array([[Timestamp('2021-01-01 00:00:00'),
        Timestamp('2022-01-01 00:00:00')],
       [Timestamp('2021-01-01 00:00:00'),
        Timestamp('2022-03-01 00:00:00')]], dtype=object)

我试过 df.to_numpy() 但这似乎不起作用,因为每个项目都是一个 numpy.datetime64 对象。

使用列表理解将值转换为列表,然后再转换为 numpy 数组:

print (np.array([list(df[x]) for x in df.columns]))
[[Timestamp('2021-01-01 00:00:00') Timestamp('2021-03-01 00:00:00')]
 [Timestamp('2022-01-01 00:00:00') Timestamp('2022-03-01 00:00:00')]]
In [176]: df
Out[176]: 
  timestamp1 timestamp2
0 2021-01-01 2022-01-01
1 2021-03-01 2022-03-01

我对 pd.Timestamp 了解不多,但看起来这些值实际上是按照您从 to_numpy() 获得的值存储的,如 numpy.datetime64[ns]:

In [179]: df.dtypes
Out[179]: 
timestamp1    datetime64[ns]
timestamp2    datetime64[ns]
dtype: object

一个单独的列,一个系列,有一个tolist()方法

In [190]: df['timestamp1'].tolist()
Out[190]: [Timestamp('2021-01-01 00:00:00'), Timestamp('2021-03-01 00:00:00')]

这就是`@jezrael 的回答有效的原因

In [191]: arr = np.array([list(df[x]) for x in df.columns])
In [192]: arr
Out[192]: 
array([[Timestamp('2021-01-01 00:00:00'),
        Timestamp('2021-03-01 00:00:00')],
       [Timestamp('2022-01-01 00:00:00'),
        Timestamp('2022-03-01 00:00:00')]], dtype=object)

一旦你有了一个数组,你就可以轻松地转置它:

In [193]: arr.T
Out[193]: 
array([[Timestamp('2021-01-01 00:00:00'),
        Timestamp('2022-01-01 00:00:00')],
       [Timestamp('2021-03-01 00:00:00'),
        Timestamp('2022-03-01 00:00:00')]], dtype=object)

一个单独的 Timestamp 对象可以 converted/displayed 有多种方式:

In [196]: x=arr[0,0]
In [197]: type(x)
Out[197]: pandas._libs.tslibs.timestamps.Timestamp
In [198]: x.to_datetime64()
Out[198]: numpy.datetime64('2021-01-01T00:00:00.000000000')
In [199]: x.to_numpy()
Out[199]: numpy.datetime64('2021-01-01T00:00:00.000000000')
In [200]: x.to_pydatetime()
Out[200]: datetime.datetime(2021, 1, 1, 0, 0)
In [201]: print(x)
2021-01-01 00:00:00
In [202]: repr(x)
Out[202]: "Timestamp('2021-01-01 00:00:00')"