在Pandas DataFrame中添加多列公式列时第三列无值的问题排查
问题排查与修复方案
我来帮你逐一解决遇到的两个问题:第三列全为空,以及触发的FutureWarning。
1. 为什么“Count Days between Day 61 - 90”列全为空?
你的区间判断逻辑存在漏洞,同时可能和数据分布有关:
- 你写的条件是
(call_added['Count Day'] > 61) & (call_added['Count Day'] <= 90),这意味着只有严格大于61且≤90的天数才会返回True,61天本身被排除在外;同理,31-60天的条件写的是>31 & <=60,也漏掉了31天这个临界值,导致区间划分不连续。 - 如果你的数据里本来就没有落在61-90之间的天数,那这一列全是False是正常的,只是CSV显示可能看起来像空值。
修正后的连续区间条件应该是:
# 1-30天(包含两端) call_added.loc[:, 'Count Days between Day 1 - Day 30'] = ((call_added['Count Day'] > 0) & (call_added['Count Day'] <= 30)) # 31-60天(包含两端) call_added.loc[:, 'Count Days between Day 31 - Day 60'] = ((call_added['Count Day'] > 30) & (call_added['Count Day'] <= 60)) # 61-90天(包含两端) call_added.loc[:, 'Count Days between Day 61 - 90'] = ((call_added['Count Day'] > 60) & (call_added['Count Day'] <= 90))
你可以先排查数据分布:运行print(call_added['Count Day'].value_counts())或print(call_added['Count Day'].describe()),确认是否存在61-90之间的天数,这样就能判断是逻辑问题还是数据本身的问题。
2. 如何解决FutureWarning?
这个警告是列名大小写不匹配导致的:
- 你的原始数据列名是
userId(小写d),但你在header4列表里写的是userID(大写D),Pandas对列名大小写严格区分,当你用columns=header4保存CSV时,找不到userID这个列,就触发了警告。
修正header4的列名即可:
header4 = ['userId', 'Day 0', 'serviceDate', 'Call Count', 'Count Day', 'Count Days between Day 1 - Day 30', 'Count Days between Day 31 - Day 60', 'Count Days between Day 61 - 90']
完整修正后的关键代码片段
# 计算Count Day call_added['Count Day'] = (call_added['serviceDate'] - call_added['Day 0']).dt.days # 修正区间判断逻辑 call_added.loc[:, 'Count Days between Day 1 - Day 30'] = ((call_added['Count Day'] > 0) & (call_added['Count Day'] <= 30)) call_added.loc[:, 'Count Days between Day 31 - Day 60'] = ((call_added['Count Day'] > 30) & (call_added['Count Day'] <= 60)) call_added.loc[:, 'Count Days between Day 61 - 90'] = ((call_added['Count Day'] > 60) & (call_added['Count Day'] <= 90)) # 修正列名大小写的header4 header4 = ['userId', 'Day 0', 'serviceDate', 'Call Count', 'Count Day', 'Count Days between Day 1 - Day 30', 'Count Days between Day 31 - Day 60', 'Count Days between Day 61 - 90'] # 保存CSV call_added.to_csv("calladded.csv", columns=header4)
内容的提问来源于stack exchange,提问作者Beakgirl
相关产品推荐
相关产品推荐

