首先,我找不到正确的英语方式来提交我的请求,因此可能之前已经有人回答过,但我找不到我需要的东西。如果对此已经有了答案,请原谅我。
因此我将“小时”存储在pd.DataFrame中,如下所示: 1454 1621 等等(分别是14:54和16:21)
问题: 其中一些是953(代表09:53)。
问题: 我怎么能“自动完成”这些,使它们长为四位数,包含零(我希望上面的数字为0953,另外23为0023)。
我正在考虑将数字转换为字符串,检查它们是否少于4个字符,如果没有,则在开头添加一个0,但是肯定有一种更Python的方式可以做到这一点?
非常感谢您的帮助,祝您有愉快的一天!
答案 0 :(得分:4)
您需要具有一个字符串列,然后才能使用zfill:
df = pd.DataFrame([1453, 923, 24, 1250], columns=['time'])
df['time'].astype(str).str.zfill(4)
#0 1453
#1 0923
#2 0024
#3 1250
#Name: time, dtype: object
答案 1 :(得分:2)
要在开头添加0,类型必须为字符串。如果列名称为hours
,则以
df.hours = df.hours.astype(str)
现在,您可以有条件地在较短的条目的开头添加一个0:
short = df.hours.str.len() < 4
df.hours.loc[short] = '0' + df.hours.loc[short]
例如:
df = pd.DataFrame({'hours': [123, 3444, 233]})
df.hours = df.hours.astype(str)
short = df.hours.str.len() < 4
df.hours.loc[short] = '0' + df.hours.loc[short]
>>> df
hours
0 0123
1 3444
2 0233
答案 2 :(得分:2)
也许这只是我,但我坚信所有日期操作都应通过datetime
而非字符串完成,因此我建议采取以下措施:
df['time'] = pd.to_datetime(df['time'].astype(str).str.zfill(4).apply(lambda x: x[:2] + ':' + x[2:]))
df['time_str'] = df['time'].dt.strftime('%I-%M')