到目前为止,我一直在社区寻找这个答案,不可能。
我在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
到目前为止,我已经找到了一些解决方案,但是对于字符串而不是系列
任何帮助将不胜感激
由于
答案 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。