【发布时间】:2018-04-06 20:05:43
【问题描述】:
为完整性更新:
import pandas as pd
dates = pd.to_datetime(['2017-10-01','2017-10-02','2017-10-03']).tolist()
df = pd.DataFrame({
'day_of_week':['m','t','w'],
'alpha':[1,2,3],
'bravo'[4,5,6],
'charlie':[7,8,9],
'dates':dates
})
agg_dik = {'alpha': sum,
'bravo': sum,
'charlie': max,
'dates': sum}
df = df.groupby('day_of_week').agg(agg_dik).reset_index(drop = True)
这会在日期时间的总和上引发错误。因此,如果数据框确实有五列,我可以避免这种情况,但我有数百列的数据框,并且经常构建聚合字典理解,例如:
agg_dik = { c : max if 'e' in c else sum for c in cols }
但是,当groupby().agg() 遇到不允许 sum 的系列时,它会出错。
所以我的问题 - 有没有办法实现我正在寻找的结果,但让 pandas 删除错误列或替换为 NaN 并继续?
我查看了其他一些问题(例如 this one),但它们并没有完全回答我的问题。
【问题讨论】:
-
鉴于您没有告诉我们
sum和mean函数失败的原因和方式,最好的办法是编写使用try-except的自定义sum_和mean_函数它们中的语句以捕获产生错误时的情况。 -
@Abdou - 我已将问题缩小到仅
datetimes的sum。但我认为问题仍然存在。函数(表面上是循环)中的 try-except 是否不会破坏首先使用.agg()函数的目的? -
你没有循环播放。
def sum_(x): try: return sum(x) except: return np.nan之类的东西是我在想的吗? -
好的。如果您想整理完整的答案,我会尝试并接受它是否有效。
标签: python pandas pandas-groupby