首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建单个pandas.core.frame.Pandas对象

创建单个pandas.core.frame.Pandas对象
EN

Stack Overflow用户
提问于 2021-09-15 01:00:45
回答 2查看 643关注 0票数 3

如何将单个数据行创建为pandas.core.frame.Pandas object

因此,当您使用for row in df.itertuples()迭代一个dataframe (df)时,每一行都将是一个pandas.core.frame.Pandas对象。我想要创建一个这种类型的对象。

例如:

代码语言:javascript
复制
import pandas as pd

d = [{'a': 1, 'b': 2}]
df = pd.DataFrame(d)
print(type(df))
print("a", df.a)

for row in df.itertuples():
    print(type(row))
    print("a", row.a)


myrow = None
df = pd.DataFrame(d)
for row in df.itertuples():
    myrow = row
print(type(myrow))
print("a", myrow.a)

其产出是:

代码语言:javascript
复制
<class 'pandas.core.frame.DataFrame'>
a 0    1
Name: a, dtype: int64
<class 'pandas.core.frame.Pandas'>
a 1
<class 'pandas.core.frame.Pandas'>
a 1

正如您所看到的,pandas.core.frame.DataFrame的行为与预期的pandas.core.frame.Pandas不同。

我真的不想像上面那样创建myrow,所以我想知道如何更有效地/直接地创建这个对象。假设我只有一个要转换为pandas.core.frame.Pandas对象的数据列表

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-15 01:35:33

解释:

itertuples的每一次迭代都会给出如下所示的对象:

代码语言:javascript
复制
Pandas(Index=0, a=1, b=2)

Pandas只是itertuples name参数的默认名称,例如:

代码语言:javascript
复制
>>> help(df.itertuples)
Help on method itertuples in module pandas.core.frame:

itertuples(index=True, name='Pandas') method of pandas.core.frame.DataFrame instance
    Iterate over DataFrame rows as namedtuples.
    
    Parameters
    ----------
    index : bool, default True
        If True, return the index as the first element of the tuple.
    name : str or None, default "Pandas"
        The name of the returned namedtuples or None to return regular
        tuples.

默认名称是Pandas。这只是namedtuple的名字。

如果您更改了该名称,类型将变得不同:

代码语言:javascript
复制
for row in df.itertuples(name='newname'):
    print(row)
    print(type(row))
    print("a", row.a)

输出:

代码语言:javascript
复制
newname(Index=0, a=1, b=2)
<class 'pandas.core.frame.newname'>
a 1

复制:

这是namedtuple的默认行为,例如:

代码语言:javascript
复制
>>> from collections import namedtuple
>>> a = namedtuple('Pandas', ['x', 'y', 'z'])
>>> a(1, 2, 3)
Pandas(x=1, y=2, z=3)
>>> type(_)
<class '__main__.Pandas'>
>>> 

如您所见,它的类型是Pandas,它是该namedtuple的类型名称,因此itertuples不会给出Pandas对象,而只是itertuples namedtuple输出的默认设置名称。

文件参考资料:

正如collections.namedtuple文档中提到的那样:

返回名为typename的新元组子类。新的子类用于创建类似元组的对象,这些对象具有可通过属性查找访问的字段以及可索引和可迭代的字段。子类的实例还有一个有用的docstring (带有typename和field_names)和一个有用的__repr__()方法,它以name=value格式列出元组内容。

如您所见,它创建了一个新类型。

票数 4
EN

Stack Overflow用户

发布于 2021-09-15 01:40:24

为了更好地理解这件事,我检查了源代码。它似乎只是传递给collections.namedtuple()工厂的默认名称,以创建一个名为tuple的工厂。这个线路也强调了我说的话。

这里有一个有趣的例子来证明我所说的:

代码语言:javascript
复制
import pandas as pd

d = [{'a': 1, 'b': 2}]
df = pd.DataFrame(d)
print(type(df))
print("a", df.a)

for row in df.itertuples():
    print(type(row))
    print("a", row.a)


myrow = None
df = pd.DataFrame(d)
for row in df.itertuples(name="user"):
    myrow = row
print(type(myrow))
print("a", myrow.a)

输出

代码语言:javascript
复制
<class 'pandas.core.frame.DataFrame'>
a 0    1
Name: a, dtype: int64
<class 'pandas.core.frame.Pandas'>
a 1
<class 'pandas.core.frame.user'>
a 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69185981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档