Python 熊猫数据帧:i';我想';统一';价值观
首先,我找不到一个合适的英语方式来表达我的请求,因此它可能已经得到了答复,但我找不到我需要的东西。如果已经有了答案,请原谅我 因此,我将“小时”存储在pd.DataFrame中,如下所示: 1454 1621 以此类推(分别是14:54和16:21) 问题: 其中一些是953(09:53) 问题: 我如何“自动完成”这些,使它们是四位数长,包含零(我希望上面的是0953,另外的23是0023) 我正在考虑将数字转换为字符串,检查它们是否少于4个字符,如果不少于4个字符,则在开头添加0,但肯定有更类似于python的方法来实现这一点Python 熊猫数据帧:i';我想';统一';价值观,python,pandas,Python,Pandas,首先,我找不到一个合适的英语方式来表达我的请求,因此它可能已经得到了答复,但我找不到我需要的东西。如果已经有了答案,请原谅我 因此,我将“小时”存储在pd.DataFrame中,如下所示: 1454 1621 以此类推(分别是14:54和16:21) 问题: 其中一些是953(09:53) 问题: 我如何“自动完成”这些,使它们是四位数长,包含零(我希望上面的是0953,另外的23是0023) 我正在考虑将数字转换为字符串,检查它们是否少于4个字符,如果不少于4个字符,则在开头添加0,但肯定有更
非常感谢您的帮助,祝您度过愉快的一天 若要在开头添加0,类型必须为string。如果列名为
hours
,则以开头
df.hours = df.hours.astype(str)
现在,您可以有条件地将0添加到较短条目的开头:
short = df.hours.str.len() < 4
df.hours.loc[short] = '0' + df.hours.loc[short]
short=df.hours.str.len()<4
飞行小时数loc[短]=“0”+飞行小时数loc[短]
例如:
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
df=pd.DataFrame({'hours':[1233444233]})
df.hours=df.hours.aType(str)
short=df.hours.str.len()<4
飞行小时数loc[短]=“0”+飞行小时数loc[短]
>>>df
小时
0 0123
1 3444
2 0233
要在开头添加0,类型必须为字符串。如果列名为hours
,则以开头
df.hours = df.hours.astype(str)
现在,您可以有条件地将0添加到较短条目的开头:
short = df.hours.str.len() < 4
df.hours.loc[short] = '0' + df.hours.loc[short]
short=df.hours.str.len()<4
飞行小时数loc[短]=“0”+飞行小时数loc[短]
例如:
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
df=pd.DataFrame({'hours':[1233444233]})
df.hours=df.hours.aType(str)
short=df.hours.str.len()<4
飞行小时数loc[短]=“0”+飞行小时数loc[短]
>>>df
小时
0 0123
1 3444
2 0233
您需要一个字符串列,然后才能使用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
您需要有一个字符串列,然后才能使用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
也许这只是我的问题,但我坚信所有日期操作都应该通过
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')
也许这只是我的问题,但我坚信所有日期操作都应该通过
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')
“统一化”是一个恰当的术语,但我认为你并不想改变价值观;你想统一他们的表现。(正如您所指出的,Python的整数表示不允许前导零。)这正是我想要做的。但我不知道怎么做(或者实际上我能做到,但我正在寻找一种简洁明了的方法来实现它,而不是把一个10-15行的函数放在一起,这可能不是“pythonic”)“Uniformize”是一个恰当的术语,但我认为你不想改变值;你想统一他们的表现。(正如您所指出的,Python的整数表示不允许前导零。)这正是我想要做的。但是我不知道怎么做(或者实际上我可以做,但我正在寻找一种简洁明了的方法来做,而不是把一个10-15行的函数放在一起,这可能不是“pythonic”)很好的答案——我不知道zfill!完美,这正是我想要的,因为它可以处理这两种情况(0923和0024)!非常感谢你的回答-我不知道zfill!完美,这正是我想要的,因为它可以处理这两种情况(0923和0024)!非常感谢你