python pandas if语句基于len

时间:2017-10-01 20:54:43

标签: python pandas if-statement

此代码为我提供了以下数据框:

import pandas as pd

pace=['06:40','10:05','7:25','10:30']
distance=['10','20','30','40']
dd=list(zip(pace,distance))
df=pd.DataFrame(dd,columns=['pace','distance'])

    pace    distance
0  06:40       10
1  10:05       20
2   7:25       30
3  10:30       40

如果我尝试使用以下代码解析小于11:00的步速数据:

input='11:00'
length_input=len(input)
df=df[df['pace']<input]

   pace    distance
0  06:40       10
1  10:05       20
3  10:30       40

我希望能够在所有具有len == 4的步速数据的开头添加零,以便包含任何速度值,如7:25。我尝试过以下代码:

if df['pace'].astype(str).map(len)==4:
    df['pace']='0'+df['pace'].astype(str)

此代码导致错误 - ValueError:Series的真值是不明确的。使用a.empty,a.bool(),a.item(),a.any()或a.all()。

搜索此错误后,我找到了(或)和(&amp;)的文档。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

怎么样

df['pace'] = df['pace'].apply(lambda x: x if len(x) > 4 else '0' + x)

apply()方法将函数应用于pace列的每一行。在这种情况下,我使用了一个lambda函数,如果行的len是>,则行保持不变。 4,否则它会在其开头添加'0'

但是,将pace列转换为datetime.time可能会更清晰:

df['pace'] = pd.to_datetime(df['pace']).dt.time