我对Python还是很陌生,但是遇到了问题。
我有一个数据框,其中一列是航班的出发时间。这些时间的格式如下:1100.0、525.0、1640.0等。
这是一个熊猫系列,我想将其转换为日期时间系列,例如:S = [11.00, 5.25, 16.40,...]
我已经尝试过的东西:
S = [str(x) for x in S]
S = [datetime.strptime(x,'%H%M.%S') for x in S]
但是由于它们的格式不尽相同
S = [parser.parse(x) for x in S]
我得到了错误:
'Unknown string format'
S= pd.to_datetime(S)
没有给我预期的结果
感谢您的回答!
答案 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/