【问题标题】:Passing fields to function. PYTHON.Pandas将字段传递给函数。蟒蛇熊猫
【发布时间】:2013-10-19 16:18:34
【问题描述】:

我正在尝试 ping 一个函数并从数据帧 pyrecords 传递多个字段。 不幸的是,下面的代码为我提供了 review 字段的正确答案,但也打印了 dealid 和 userid 的所有值。

  for review in pyrecords['review']:
       analyze_text(review,u'english',pyrecords['dealid'],pyrecords['userid'])

这是数据框的样子。

>>> pyrecords
<class 'pandas.core.frame.DataFrame'>
Int64Index: 433 entries, 0 to 432
Data columns (total 5 columns):
createddate        433  non-null values
userid             433  non-null values
dealid             433  non-null values
preferredlocale    42  non-null values
review             433  non-null values
dtypes: datetime64[ns](1), int64(2), object(2)

【问题讨论】:

  • 您还没有真正解释问题所在。我们不知道analyze_text 函数在做什么,所以不可能说是否有问题。你一一给它具体的评论,你还给它所有的交易ID和用户ID(这看起来有点奇怪)。
  • 最后一部分,“你一个一个给它具体的评论,你还给它所有的dealids和userids(这看起来有点奇怪)。”是我需要帮助的,我需要传递同一行的字段,而不是所有值。

标签: python for-loop pandas try-catch


【解决方案1】:
for index, row in pyrecords.iterrows():     
    analyze_text(row['review'], u'english',row['dealid'],row['userid'])

请注意,遍历 DataFrame 的行可能表明您没有充分利用 Pandas。为了获得更好的性能,您需要重写 analyze_text 以对完整的 DataFrame 或 Series 进行操作,而不是逐行操作。

【讨论】:

  • 我收到一个错误,review 字段是 str: ' File "", line 2, in TypeError: tuple indices must be integers, not str'
  • @RomainD:对不起,我的错。 iterrows 返回 (index, row) 的元组,而不仅仅是行本身。我已编辑我的帖子以更正此问题。
【解决方案2】:

您的问题有点不清楚,但您似乎正在尝试对 DataFrame 的每一行应用一个函数。试试

 analyze_english = lambda review, dealid, userid: \
     analyze_text(review, u'english', dealid, userid)

 pyrecords[['review', 'dealid', 'userid']].apply(analyze_english, axis=1)

【讨论】:

    猜你喜欢
    • 2021-11-09
    • 2016-10-16
    • 1970-01-01
    • 2021-02-18
    • 1970-01-01
    • 2018-11-07
    • 2016-08-07
    • 2015-01-13
    • 2022-01-23
    相关资源
    最近更新 更多