如何将字符串转换为日期时间?

时间:2019-04-03 16:40:28

标签: python

我对Python还是很陌生,但是遇到了问题。

我有一个数据框,其中一列是航班的出发时间。这些时间的格式如下:1100.0、525.0、1640.0等。

这是一个熊猫系列,我想将其转换为日期时间系列,例如:S = [11.00, 5.25, 16.40,...]

我已经尝试过的东西:

  • 将我的对象转换为字符串:
S = [str(x) for x in S]
  • 使用datetime.strptime:
S =  [datetime.strptime(x,'%H%M.%S') for x in S]

但是由于它们的格式不尽相同

  • 使用dateutil中的解析器:
S =  [parser.parse(x) for x in S]

我得到了错误:

 'Unknown string format'
  • 使用熊猫日期时间:
S= pd.to_datetime(S)

没有给我预期的结果

感谢您的回答!

4 个答案:

答案 0 :(得分:1)

由于它是数据帧(A series)中的一列,因此在转换时应该保持这种状态就可以了。

S = [1100.0, 525.0, 1640.0]
se = pd.Series(S) # Your column

# se:
0    1100.0
1     525.0
2    1640.0
dtype: float64

setime = se.astype(int).astype(str).apply(lambda x: x[:-2] + ":" + x[-2:])

这会将浮点数转换为格式正确的字符串:

0    11:00
1     5:25
2    16:40
dtype: object

然后您可以简单地执行以下操作:

df["your_new_col"] = pd.to_datetime(setime)

答案 1 :(得分:0)

怎么样?

(添加了if语句,因为某些条目在小数点前有4位数字,而有些则有3位。为此添加了125.0的用例)

for(j=len-1;j>i ;j--)

j>=i

from datetime import datetime

答案 2 :(得分:0)

必须有更好的方法来执行此操作,但这对我有用。

df=pd.DataFrame([1100.0, 525.0, 1640.0], columns=['hour'])
df['hour_dt']=((df['hour']/100).apply(str).str.split('.').str[0]+'.'+
  df['hour'].apply((lambda x: '{:.2f}'.format(x/100).split('.')[1])).apply(str))

print(df)

     hour hour_dt
0  1100.0   11.00
1   525.0    5.25
2  1640.0   16.40

答案 3 :(得分:0)

您可以按照以下步骤进行操作:

# Just initialising a state in line with your requirements
st = ["1100.0", "525.0", "1640.0"]
dfObj = pd.DataFrame(st)

# Casting the string column to float
dfObj_num = dfObj[0].astype(float)

# Getting the hour representation out of the number 
df1 = dfObj_num.floordiv(100)

# Getting the minutes
df2 = dfObj_num.mod(100)

# Moving the minutes on the right-hand side of the decimal point
df3 = df2.mul(0.01)

# Combining the two dataframes
df4 = df1.add(df3)

# At this point can cast to other types

结果:

0    11.00
1     5.25
2    16.40

您可以运行此示例来亲自验证步骤,也可以将其变为函数。如有必要,请稍做更改,以便根据您的精确要求进行调整。

阅读有关熊猫系列的这篇文章可能会很有用。 https://www.geeksforgeeks.org/python-pandas-series/