python数据帧转换多个日期时间格式

时间:2015-06-30 20:04:48

标签: python datetime pandas dataframe

我有一个像这样的pandas.dataframe(' col'列有两种格式):

    col                            val
'12/1/2013'                       value1
'1/22/2014 12:00:01 AM'           value2
'12/10/2013'                      value3
'12/31/2013'                      value4 

我想将它们转换为日期时间,我正在考虑使用:

test_df['col']= test_df['col'].map(lambda x: datetime.strptime(x, '%m/%d/%Y'))    
test_df['col']= test_df['col'].map(lambda x: datetime.strptime(x, '%m/%d/%Y %H:%M %p'))

显然,他们中的任何一个都适用于整个df。我正在考虑使用试用,除了但没有运气,有什么建议吗?

3 个答案:

答案 0 :(得分:6)

只需使用to_datetime,它的男人/女人就足以处理这两种格式:

In [4]:
df['col'] = pd.to_datetime(df['col'])
df.info()

<class 'pandas.core.frame.DataFrame'>
Int64Index: 4 entries, 0 to 3
Data columns (total 2 columns):
col    4 non-null datetime64[ns]
val    4 non-null object
dtypes: datetime64[ns](1), object(1)
memory usage: 96.0+ bytes

df现在看起来像这样:

In [5]:
df

Out[5]:
                  col     val
0 2013-12-01 00:00:00  value1
1 2014-01-22 00:00:01  value2
2 2013-12-10 00:00:00  value3
3 2013-12-31 00:00:00  value4

答案 1 :(得分:1)

您可以创建新列:

test_df['col1'] = pd.Timestamp(test_df['col']).to_datetime()

然后删除col并重命名col1。

答案 2 :(得分:0)

对我有用。 我在“ fecha_hechos”列中有两种格式。格式如下:

  • 2015/03/02
  • 2010年10月2日

我所做的是:

carpetas_cdmx['Timestamp'] = pd.to_datetime(carpetas_cdmx.fecha_hechos, format='%Y/%m/%d %H:%M:%S', errors='coerce')
mask = carpetas_cdmx.Timestamp.isnull()
carpetas_cdmx.loc[mask, 'Timestamp'] = pd.to_datetime(carpetas_cdmx[mask]['fecha_hechos'], format='%d/%m/%Y %H:%M',errors='coerce')

分别是:carpetas_cdmx是我的DataFrame 并以我的格式fecha_hechos