2015-07-13 279 views
1

我有一个日期列的数据类型为datetime64 [ns]的熊猫数据框。数据帧中有超过1000个观测值。我想改造下面几列:熊猫列日期转换

date 
2013-05-01 
2013-05-01 

date 
05/2013 
05/2013 

date 
05-2013 
05-2013 

编辑//

这是我的示例代码截至目前

test = pd.DataFrame({'a':['07/2017','07/2017',pd.NaT]}) 

      a 
0 2017-07-13 
1 2017-07-13 
2  NaT 

test['a'].apply(lambda x: x if pd.isnull(x) == True else x.strftime('%Y-%m')) 

0 2017-07-01 
1 2017-07-01 
2   NaT 
Name: a, dtype: datetime64[ns] 

为什么只有日期变化而不是格式?

+0

是否要将信息存储为字符串?如果你想保留它作为一个适当的日期时间列,日间信息是不可避免的(据我所知)。 –

+0

正确的日期时间列,如果不可能然后字符串 –

回答

2

您可以使用strftime方法将datetime64转换为您喜欢的任何字符串格式。在你的情况下,你会像这样应用它:

df.date = df.date[df.date.notnull()].map(lambda x: x.strftime('%m/%Y')) 
df.date 
Out[111]: 
0 05/2013 
1 05/2013 
+0

我收到一个错误:ValueError:year = 1在1900之前; datetime strftime()方法需要year> = 1900。在1900年之前我没有任何年份。 –

+0

你能找出它失败的行吗? (代码适用于你所包含的例子) – maxymoo

+0

这是NaN的。我怎么写一个lambda函数来绕过NaN? –