【问题标题】:pandas, dataframe: If you need to process data row by row, how to do it faster than itertuplespandas,dataframe:如果需要逐行处理数据,怎么做比itertuples快
【发布时间】:2022-01-23 13:55:00
【问题描述】:

我知道.itertuples().iterrows()很慢,但是如果我需要一次使用和处理一行数据,我该如何加快它们的速度,如下所示?

df = pd.read_csv('example.csv')

posts = []
for row in df.itertuples():
    post = Post(title=row.title, text=row.text, ...)
    posts.append(post)

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    如果您的 DataFrame 列与您的类属性具有相同的名称,您可以使用列表解析和解包(使用 kwargs)。下面是一个例子。

    df = pd.DataFrame({"title": ["fizz", "buzz"], "text": ["aaaa", "bbbb"]})
    posts = [Post(**kwargs) for kwargs in df.to_dict("records")]
    

    【讨论】:

      【解决方案2】:

      我通常做的是使用apply函数。

      import pandas as pd
      
      df = pd.DataFrame(dict(title=["title1", "title2", "title3"],text=["text1", "text2", "text3"]))
      
      df["Posts"] = df.apply(lambda x: dict(title=x["title"], text=x["text"]), axis=1)
      
      posts = list(df["Posts"])
      print(posts)
      

      输出:

      [{'title': 'title1', 'text': 'text1'}, {'title': 'title2', 'text': 'text2'}, {'title': 'title3', 'text': 'text3'}]
      

      当您有其他方法可以执行此操作时,最好避免使用 for 循环。

      【讨论】:

      • 它并不比使用循环更好,在后台apply 对所有行运行一个循环,所以实际上几乎相同,github.com/pandas-dev/pandas/blob/…
      • 你是对的。我仍然会使用 df.apply 因为我尽可能避免编写循环。
      猜你喜欢
      • 2020-12-17
      • 1970-01-01
      • 2017-08-09
      • 2011-06-21
      • 2015-07-31
      • 1970-01-01
      • 2015-11-23
      • 2012-04-08
      • 1970-01-01
      相关资源
      最近更新 更多