创建包含数据和浮点数据类型的列



我使用一个名为emails_visits的数据帧: 大熊猫是进口的

Rep  Doctor       Date   type
0     1       1 2021-01-25  email
1     1       1 2021-05-29  email
2     1       2 2021-03-15  email
3     1       2 2021-04-02  email
4     1       2 2021-04-29  email
30    1       2 2021-06-01  visit
5     1       3 2021-01-01  email

我想根据列类型中的值创建列"date_after",如果它等于"访问",我希望从"日期"列中看到日期,否则为空。

我使用此代码:

emails_visits["date_after"]=np.where(emails_visits["type"]=="visit",emails_visits["Date"],np.nan)

但是,它会引发一个错误:

emails_visits["date_after"]=np.where(emails_visits["type"]=="visit",emails_visits["Date"],np.nan)
File "<__array_function__ internals>", line 5, in where
TypeError: The DType <class 'numpy.dtype[datetime64]'> could not be promoted by <class 'numpy.dtype[float64]'>. This means that no common DType exists for the given inputs. For example they cannot be stored in a single array unless the dtype is `object`. The full list of DTypes is: (<class 'numpy.dtype[datetime64]'>, <class 'numpy.dtype[float64]'>)

我该如何解决这个问题?

如果你愿意,你可以这样做。

email_visits['date after'] = email_visits.apply(lambda x: x[2] if x[3] == 'visit' else '', axis=1)

emails_visitsDate的类型datetime64np.nan的类型np.float64不兼容。由于您似乎使用 Pandas,因此您需要使用pd.NA代替用于缺失值(而np.nan表示该值不是数字,仅适用于浮点数)。其实这里最好不要用np.where,而是用熊猫函数。这是一个简单的解决方案:

emails_visits["date_after"] = emails_visits["Date"].where(emails_visits["type"]=="visit")

最新更新