将字符串日期转换为pandas dataframe中的其他格式

时间:2016-06-27 17:49:01

标签: python pandas dataframe

到目前为止,我一直在社区寻找这个答案,不可能。

我在python 3.5.1中有一个数据框,其中包含一个从CSV文件导入的字符串日期的列。

数据框看起来像这样

                  TimeStamp  TBD  TBD     Value  TBD
0       2016/06/08 17:19:53  NaN  NaN  0.062942  NaN
1       2016/06/08 17:19:54  NaN  NaN  0.062942  NaN
2       2016/06/08 17:19:54  NaN  NaN  0.062942  NaN

我需要的是将TimeStamp列格式更改为 %m /%d /%y%H:%M:%D

                  TimeStamp  TBD  TBD     Value  TBD
0       06/08/2016 17:19:53  NaN  NaN  0.062942  NaN

到目前为止,我已经找到了一些解决方案,但是对于字符串而不是系列

任何帮助将不胜感激

由于

2 个答案:

答案 0 :(得分:5)

如果您将字符串列转换为时间序列,则可以使用dt.strftime method

import numpy as np
import pandas as pd
nan = np.nan
df = pd.DataFrame({'TBD': [nan, nan, nan], 'TBD.1': [nan, nan, nan], 'TBD.2': [nan, nan, nan], 'TimeStamp': ['2016/06/08 17:19:53', '2016/06/08 17:19:54', '2016/06/08 17:19:54'], 'Value': [0.062941999999999998, 0.062941999999999998, 0.062941999999999998]})
df['TimeStamp'] = pd.to_datetime(df['TimeStamp']).dt.strftime('%m/%d/%Y %H:%M:%S')
print(df)

产量

   TBD  TBD.1  TBD.2            TimeStamp     Value
0  NaN    NaN    NaN  06/08/2016 17:19:53  0.062942
1  NaN    NaN    NaN  06/08/2016 17:19:54  0.062942
2  NaN    NaN    NaN  06/08/2016 17:19:54  0.062942

由于您想要将一列字符串转换为另一个(不同的)字符串列,您还可以使用向量化的str.replace方法:

import numpy as np
import pandas as pd
nan = np.nan
df = pd.DataFrame({'TBD': [nan, nan, nan], 'TBD.1': [nan, nan, nan], 'TBD.2': [nan, nan, nan], 'TimeStamp': ['2016/06/08 17:19:53', '2016/06/08 17:19:54', '2016/06/08 17:19:54'], 'Value': [0.062941999999999998, 0.062941999999999998, 0.062941999999999998]})
df['TimeStamp'] = df['TimeStamp'].str.replace(r'(\d+)/(\d+)/(\d+)(.*)', r'\2/\3/\1\4')
print(df)

因为

In [32]: df['TimeStamp'].str.replace(r'(\d+)/(\d+)/(\d+)(.*)', r'\2/\3/\1\4')
Out[32]: 
0    06/08/2016 17:19:53
1    06/08/2016 17:19:54
2    06/08/2016 17:19:54
Name: TimeStamp, dtype: object

这使用正则表达式来重新排列字符串的片段,而无需先解析 字符串作为日期。这比第一种方法更快(主要是因为它跳过了 解析步骤),但它也有不检查的缺点 日期字符串是有效日期。

答案 1 :(得分:0)

对于大多数常见的日期和日期时间格式,pandas .to_datetime函数可以解析它们而无需提供格式。 例如:

df.TimeStamp.apply(lambda x: pd.to_datetime(x))

在问题中给出的示例中,

df['TimeStamp'] = pd.to_datetime(df['TimeStamp']).dt.strftime('%m/%d/%Y %H:%M:%S')

将给我们相同的结果。

如果您有多列,使用.apply会很有效。

当然,在许多情况下必须提供解析格式。有关格式的完整列表,请参见https://docs.python.org/3/library/datetime.html