【问题标题】:apply a function to columns in Pandas raises AttributeError将函数应用于 Pandas 中的列会引发 AttributeError
【发布时间】:2020-07-04 18:15:28
【问题描述】:

我有以下dict 和熊猫DataFrame

sample_dict = {'isDuplicate': {'1051681551': False, '1037545402': True, '1035390559': False},
               'dateTime': {'1051681551': Timestamp('2019-01-29 09:09:00+0000', tz='UTC'),
               '1037545402': Timestamp('2019-01-11 02:06:00+0000', tz='UTC'),
               '1035390559': Timestamp('2019-01-08 14:35:00+0000', tz='UTC')},
               'dateTimePub': {'1051681551': None, '1037545402': None, '1035390559': None}}

df = pd.DataFrame.from_dict(sample_dict)

我想将np.where() 函数应用于dateTimedateTimePub 列,例如:

def _replace_datetime_with_datetime_pub(news_dataframe):
    news_dataframe.dateTime = np.where(news_dataframe.dateTimePub, news_dataframe.dateTimePub, news_dataframe.dateTime)
    return pd.to_datetime(news_dataframe.dateTime)

df.apply(_replace_datetime_with_datetime_pub) 

但我收到以下错误,

AttributeError: 'Series' object has no attribute 'dateTimePub'

可以做到df = _replace_datetime_with_datetime_pub(df)。但我的问题是,

  • 如何通过pd.DataFrame.applypd.DataFrame.transform 方法应用此功能,以及

  • 为什么会出现这个错误?

我已经检查了许多其他类似的问题,但没有一个是AttributeError

【问题讨论】:

    标签: python-3.x pandas dataframe apply


    【解决方案1】:

    使用 apply,您将 DataFrame 分解为系列以传递给您的函数。由于您没有指定轴关键字参数,pandas 假设您希望将每一列作为一个系列传递。这是您得到的AttributeError 的来源。为了让 pandas 将每一行作为一个系列传递,您需要在 apply 调用中指定 axis=1

    即便如此,您仍需要对函数进行一些调整以使其适合apply 范式。特别是,您要考虑函数应该如何处理它遇到的每一行。您传递给apply 的函数(如果您指定axis=1)将在每一行上独立于其他行工作。然后将每一行的返回值拼接在一起以返回一个系列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-22
      • 1970-01-01
      • 2020-05-11
      • 1970-01-01
      • 2020-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多