此代码为我提供了以下数据框:
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;)的文档。任何帮助将不胜感激。
答案 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