Pandas DataFrame按行求和生成total_hours列结果恒为0.0的问题求助
Pandas DataFrame按行求和生成total_hours列结果恒为0.0的问题求助
我现在遇到个头疼的问题:想给Pandas DataFrame的每一行求和,生成一个total_hours列来统计每行的日志工作时长(单位是秒,后续我自己会转成HH:MM格式)。表格里有个id列,所以我特意用iloc[:,1:]避开了第一列求和,结果却完全不对——所有行的total_hours都是0.0,明明每行里有不少整数时长值啊!
说下数据情况:这些行里混合了整数、字符串(比如"No hours logged")还有列表类型的值(像[10:02, Odd number: missing entry]),我本来想用numeric_only=True参数只对数值型求和,结果还是不行。之前看到有人说转置可能有用,试了也没效果。
下面是我的代码:
import pandas as pd def final_output(df): # 把daily_logs列拆成多列,然后删掉原列 df = pd.concat([df, pd.DataFrame(list(df['daily_logs']))], axis=1).drop(columns='daily_logs') # 从第二列开始按行求和,生成total_hours df['total_hours'] = df.iloc[:,1:].sum(axis=1, numeric_only=True) # 这部分完全没按预期工作 return df df_results = final_output(df) df_results
输入的DataFrame(还没加total_hours列)和输出结果如下,输出结构看起来没问题,但total_hours应该是每行所有整数的总和,结果却全是0.0:
| id | name | 2023-11-28 | 2023-11-29 | 2023-11-30 | 2023-12-01 | 2023-12-02 | 2023-12-03 | 2023-12-04 | 2023-12-05 | total_hours |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 514 | alexis | No hours logged | No hours logged | No hours logged | No hours logged | No hours logged | No hours logged | No hours logged | 0.0 |
| 1 | 2414 | donald | 29160 | 29160 | 28860 | 28620 | [10:02, Odd number: missing entry] | No hours logged | No hours logged | 28860 |
| 2 | 3225 | mackenzie | 28500 | 28620 | 28560 | 28620 | 28980 | No hours logged | No hours logged | 28740 |
| 3 | 3434 | louisa | 25380 | 18840 | 26040 | No hours logged | 25560 | No hours logged | No hours logged | 24900 |
| 4 | 3864 | olga | 15600 | 19080 | 14400 | 13800 | 5220 | 17820 | No hours logged | 14400 |
| 5 | 4716 | rick | 30180 | 28800 | 28740 | 28620 | 28680 | No hours logged | No hours logged | 28680 |
| 6 | 5793 | roberta | 29220 | 29220 | 29460 | 29280 | 29340 | No hours logged | No hours logged | 29040 |
有没有大佬能帮我看看问题出在哪?为什么求和结果全是0啊?
备注:内容来源于stack exchange,提问作者nico
相关产品推荐
相关产品推荐

