【发布时间】:2021-01-19 13:28:16
【问题描述】:
给定一个pandas.DataFrame,其中有一列包含混合数据类型,例如
df = pd.DataFrame({'mixed': [pd.Timestamp('2020-10-04'), 999, 'a string']})
我想知道如何获取列(系列)中各个对象的数据类型?假设我想修改 Series 中所有特定类型的条目,例如将所有整数乘以某个因子。
我可以迭代推导出一个掩码并在loc 中使用它,比如
m = np.array([isinstance(v, int) for v in df['mixed']])
df.loc[m, 'mixed'] *= 10
# df
# mixed
# 0 2020-10-04 00:00:00
# 1 9990
# 2 a string
这可以解决问题,但我想知道是否有更多 pandastic 的方式来做到这一点?
【问题讨论】:
-
我会反过来想:如果发生“真正的”高效矢量化(内置 C++ 级优化函数),这些函数是否可能自己执行昂贵的类型检查为每个元素?我想这不太可能,因为它违背了有效矢量化的中心思想。因此,我想无法避免 python 级别的类型检查。在这种情况下,映射/应用/列表理解/等。是not likely to differ much efficiency-wise。 (P.s. 这个论点与句法美学无关。)