我想知道为什么该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?
我有一个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)
有没有"简单"的方法来做到这一点?
谢谢 :)
我在 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,然后按索引合并两个数据帧。还有其他解决办法吗?
是否有一种令人遗憾的方法来获取数据帧切片中的索引?换句话说,是否有更好的方法来编写以下代码:
df.loc [df ['A']> 5] .index
谢谢!
python ×4
pandas ×3
dataframe ×2
merge ×2
collections ×1
fillna ×1
indexing ×1
inheritance ×1
iterable ×1
python-3.x ×1
rows ×1