10

我想更改一个数据框列的 dtype(从 datetime64 到 object)。

首先,我创建数据框:

Python 2.6.8 (unknown, Jan 26 2013, 14:35:25) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas as pd
>>> values = pd.Series(i for i in range(5))
>>> dates = pd.date_range('20130101',periods=5)
>>> df = pd.DataFrame({'values': values, 'dates': dates})
>>> df
/usr/local/lib/python2.6/dist-packages/pandas/core/config.py:570: DeprecationWarning: height has been deprecated.

  warnings.warn(d.msg, DeprecationWarning)
                dates  values
0 2013-01-01 00:00:00       0
1 2013-01-02 00:00:00       1
2 2013-01-03 00:00:00       2
3 2013-01-04 00:00:00       3
4 2013-01-05 00:00:00       4

它有两列:一列是 datetime64,另一列是 int64 dtype:

>>> df.dtypes
dates     datetime64[ns]
values             int64
dtype: object

在 pandas 文档中,我发现了如何将系列转换为任何 dtypes。它看起来像我需要的:

>>> df['dates'].astype(object)
0    2013-01-01 00:00:00
1    2013-01-02 00:00:00
2    2013-01-03 00:00:00
3    2013-01-04 00:00:00
4    2013-01-05 00:00:00
Name: dates, dtype: object

但是,当我将此系列指定为数据框列时,我又得到了一个 datetime64 dtype。

>>> df['dates'] = df['dates'].astype(object)
>>> df.dtypes
dates     datetime64[ns]
values             int64
dtype: object

请帮忙。如何将数据框的列转换为对象 dtype?谢谢。

4

4 回答 4

8

如果您真的想从 datetime64[ns] 的数据类型更改为对象,您可以运行如下内容:

df['dates'] = df['dates'].apply(lambda x: str(x))
print df.types # Can verify to see that dates prints out as an object
于 2014-03-18T16:10:03.450 回答
1

如果要将type 的Date列转换为,则以下代码将起作用:objectdatetime64[ns] dtype;

df['Date']=pd.to_datetime(df['Date'])
于 2019-06-23T16:33:36.613 回答
0

这就是你所追求的吗?

In [9]: pd.pivot_table(data=df,rows='columns',cols='rows',values='values',margins=True).T
Out[9]: 
columns  2013-01-01 00:00:00  2013-01-02 00:00:00  2013-01-03 00:00:00  2013-01-04 00:00:00  2013-01-05 00:00:00       All
rows                                                                                                                      
a                          0                  NaN                    2                    3                  NaN  1.666667
b                        NaN                    1                  NaN                  NaN                    4  2.500000
All                        0                    1                    2                    3                    4  2.000000
于 2013-10-18T13:23:43.580 回答
0

不精通 lambda 的使用。在一些简单的情况下,df['dates'].astype(str)也可以。

注意:当列中有 NaN 时,它不起作用。

不是 OP 的解决方案,但其他人可能会在这个问题中找到帮助。几乎是重复的,但主要是在谈论转换为数字。

于 2017-08-30T02:26:08.783 回答