Polars 循环遍历数据集中的行

Joh*_*ith 12 python loops python-polars

我正在尝试使用以下代码循环遍历 Polars 记录集:

\n
\nimport polars as pl\n\nmydf = pl.DataFrame(\n    {"start_date": ["2020-01-02", "2020-01-03", "2020-01-04"],\n     "Name": ["John", "Joe", "James"]})\n\nprint(mydf)\n\n\xe2\x94\x82start_date  \xe2\x94\x86 Name  \xe2\x94\x82\n\xe2\x94\x82 ---        \xe2\x94\x86 ---   \xe2\x94\x82\n\xe2\x94\x82 str        \xe2\x94\x86 str   \xe2\x94\x82\n\xe2\x95\x9e\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa1\n\xe2\x94\x82 2020-01-02 \xe2\x94\x86 John  \xe2\x94\x82\n\xe2\x94\x82 2020-01-03 \xe2\x94\x86 Joe   \xe2\x94\x82\n\xe2\x94\x82 2020-01-04 \xe2\x94\x86 James \xe2\x94\x82\n\nfor row in mydf.rows():\n    print(row)\n\n('2020-01-02', 'John')\n('2020-01-03', 'Joe')\n('2020-01-04', 'James')\n\n
Run Code Online (Sandbox Code Playgroud)\n

有没有办法使用命名列而不是索引来专门引用“名称”?在 Pandas 中,这看起来像:

\n
import pandas as pd\n\nmydf = pd.DataFrame(\n    {"start_date": ["2020-01-02", "2020-01-03", "2020-01-04"],\n     "Name": ["John", "Joe", "James"]})\n\nfor index, row in mydf.iterrows():\n    mydf['Name'][index]\n\n'John'\n'Joe'\n'James'\n
Run Code Online (Sandbox Code Playgroud)\n

Art*_*hur 15

您可以指定要命名的

for row in mydf.rows(named=True):
    print(row)
Run Code Online (Sandbox Code Playgroud)

它会给你一个字典:

{'start_date': '2020-01-02', 'Name': 'John'}
{'start_date': '2020-01-03', 'Name': 'Joe'}
{'start_date': '2020-01-04', 'Name': 'James'}
Run Code Online (Sandbox Code Playgroud)

然后你可以打电话row['Name']

注意:

  • 以前的版本返回的是namedtuple而不是dict。
  • 使用内存较少iter_rows
  • 总的来说,不建议以这种方式迭代数据

行迭代不是最优的,因为底层数据以列形式存储;如果可能,最好通过一种专用的导出/输出方法进行导出。

  • @JohnSmith 在极坐标中没有很好地记录行迭代,因为它基本上绕过了所有优化,因此非常不鼓励。这就像你买了一辆法拉利,然后问如何缓慢而安静地驾驶它。你最终想要什么结果? (2认同)