小编Kuz*_*nbo的帖子

collections.Iterable 如何与 isinstance() 一起工作?

我想知道为什么该isinstance函数collections.Iterable用于检查对象是否可迭代,如果它不是Iterable.

如果我们有两个类:

class first_class(object):
    pass

class second_class(object):
     def __iter__(self):
         pass
Run Code Online (Sandbox Code Playgroud)

调用ininstance(first_class(), Iterable)返回False

调用isinstance(second_class(), Iterable)返回True

的文档isinstance说:“返回对象是类的实例还是其子类的实例”。

因为两个类都是 的子类object,为什么一个会返回它是 的子类Iterable而另一个不是?

我知道这是因为__iter__方法,但我不明白为什么它会影响isinstance的结果,如果两个类中的继承相同。

当我尝试以下操作时,我变得更加困惑:

x = first_class()
x.__iter__ = lambda: None
Run Code Online (Sandbox Code Playgroud)

如果添加__iter__方法使 second_class 可迭代,为什么在上面添加__iter__方法的代码之后,isinstance(x, Iterable)仍然返回False

python collections inheritance iterable python-3.x

6
推荐指数
0
解决办法
283
查看次数

使用另一个数据框的合并填充na值

我有一个na值的列,我想根据一个键根据另一个数据帧的值填充.我想知道是否有任何简单的方法可以这样做.

示例:我有一个对象的数据框及其颜色如下:

  object   color
0  chair   black
1   ball  yellow
2   door   brown
3   ball     **NaN**
4  chair   white
5  chair     **NaN**
6   ball    grey
Run Code Online (Sandbox Code Playgroud)

我想用以下数据框中的默认颜色填充颜色列中的na值:

  object default_color
0  chair         brown
1   ball          blue
2   door          grey
Run Code Online (Sandbox Code Playgroud)

结果将是这样的:

  object   color
0  chair   black
1   ball  yellow
2   door   brown
3   ball     **blue**
4  chair   white
5  chair     **brown**
6   ball    grey
Run Code Online (Sandbox Code Playgroud)

有没有"简单"的方法来做到这一点?

谢谢 :)

python merge dataframe pandas fillna

5
推荐指数
3
解决办法
1213
查看次数

将行与数据帧 pandas 中的下一行合并

我在 pandas 中有一个包含多列的数据框。我想将每一行与下一行合并。例子:

输入数据框:

A   B   C
a1  a2  a3
b1  b2  b3
c1  c1  c3
d1  d2  d3
Run Code Online (Sandbox Code Playgroud)

输出数据帧:

A1   B1   C1  A2   B2   C2
a1   a2   a3  b1   b2   b3
b1   b2   b3  c1   c2   c3
c1   c2   c3  d1   d2   d3
d1   d2   d3  NaN  NaN  NaN
Run Code Online (Sandbox Code Playgroud)

我想出的解决方案是复制原始数据帧,将索引更改为索引 - 1,然后按索引合并两个数据帧。还有其他解决办法吗?

python merge rows dataframe pandas

4
推荐指数
1
解决办法
3520
查看次数

在数据帧切片中返回索引的"Pandorable"方式

是否有一种令人遗憾的方法来获取数据帧切片中的索引?换句话说,是否有更好的方法来编写以下代码:

df.loc [df ['A']> 5] .index

谢谢!

python indexing pandas

2
推荐指数
1
解决办法
67
查看次数