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

use*_*317 4 python dataframe pandas

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

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

例如:

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)
Run Code Online (Sandbox Code Playgroud)

其输出为:

<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
Run Code Online (Sandbox Code Playgroud)

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

我真的不想myrow按照上面的方式创建,所以我想知道创建该对象的更有效/直接的方法是什么。假设我只有 1 个想要转换为pandas.core.frame.Pandas对象的数据列表

U10*_*ard 5

解释:

每次迭代都会itertuples给出一个像这样的对象:

Pandas(Index=0, a=1, b=2)
Run Code Online (Sandbox Code Playgroud)

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

>>> 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.
Run Code Online (Sandbox Code Playgroud)

默认名称是Pandas. 这只是 的名称namedtuple

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

for row in df.itertuples(name='newname'):
    print(row)
    print(type(row))
    print("a", row.a)
        
Run Code Online (Sandbox Code Playgroud)

输出:

newname(Index=0, a=1, b=2)
<class 'pandas.core.frame.newname'>
a 1
Run Code Online (Sandbox Code Playgroud)

复制:

这是 s 的默认行为namedtuple,示例:

>>> 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'>
>>> 
Run Code Online (Sandbox Code Playgroud)

正如您所看到的, this 的类型是Pandas,它是 this 的类型名称namedtuple,因此itertuples不会给出Pandas对象,而只是输出的默认集名称itertuples namedtuple

文档参考:

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

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

正如您所看到的,它创建了一个新类型。