【问题标题】:How to apply method/function to a dataframe in python如何将方法/函数应用于python中的数据框
【发布时间】:2020-04-08 08:00:28
【问题描述】:

功能是:

def combine(row):
    count = 0
    stage = ""
    if (str(row.doggo) == "doggo"):
        stage = "doggo"
        count += 1

    if row.floofer == "floofer":
        stage = "floofer"
        count += 1

    if row.pupper == "pupper":
        stage = "pupper"
        count += 1

    if row.pupper == "puppo":
        stage = "puppo"
        count += 1

    if count == 0:
        return pd.np.NAN
    elif count == 1:
        return stage
    else:
        return "multiple"

调用方法时:

df_twitter_archive_clean["status"] = df_twitter_archive_clean[["doggo","floofer","pupper","puppo"]].apply(combine)

出现错误信息:

----------------------------------- ---------------------------- AttributeError Traceback(最近调用 最后)在 ----> 1 df_twitter_archive_clean["status"] = df_twitter_archive_clean[["doggo","floofer","pupper","puppo"]].apply(combine)

~/anaconda3/lib/python3.7/site-packages/pandas/core/frame.py 在 应用(自我,函数,轴,广播,原始,减少,结果类型,参数, **kwds) 6485 args=args, 6486 kwds=kwds) -> 6487 return op.get_result() 6488 6489 def applymap(self, func):

~/anaconda3/lib/python3.7/site-packages/pandas/core/apply.py 获取结果(自我) 第149章 150 --> 151 返回 self.apply_standard() 152 153 def apply_empty_result(自我):

~/anaconda3/lib/python3.7/site-packages/pandas/core/apply.py 应用标准(自我) 255 256 # 使用序列生成器计算结果 --> 257 self.apply_series_generator() 258 259 # 包装结果

~/anaconda3/lib/python3.7/site-packages/pandas/core/apply.py apply_series_generator(self) 284 尝试: 285 for i, v in enumerate(series_gen): --> 286 个结果[i] = self.f(v) 第287章 288 例外为 e:

在组合(行)中 2 计数 = 0 3阶段=“” ----> 4 if (str(row.doggo) == "doggo"): 5 阶段 = "doggo" 6 计数 += 1

~/anaconda3/lib/python3.7/site-packages/pandas/core/generic.py getattr(self, name) 5065 if self._info_axis._can_hold_identifiers_and_holds_name(name): 5066
返回自我[姓名] -> 5067 返回对象。getattribute(self, name) 5068 5069 def setattr(self, name, value):

AttributeError: ("'Series' object has no attribute 'doggo'", '发生在索引 doggo')

【问题讨论】:

  • apply() 中使用axis=1 表示列轴

标签: python pandas dataframe


【解决方案1】:

试试:

df_twitter_archive_clean["status"] = df_twitter_archive_clean[["doggo","floofer","pupper","puppo"]].apply(combine, axis=1)

否则,您将按列应用函数,如果我理解正确,您希望按行进行

【讨论】:

  • 别担心,请考虑投票,并将此帖子标记为答案以结束您的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-09
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-04
  • 1970-01-01
相关资源
最近更新 更多