我需要遍历 Pandas 数据帧,以便将每一行作为函数(实际上是类构造函数)的参数传递给**kwargs
. 这意味着每一行都应该像一个字典,键是列名,值是每行对应的列名。
这有效,但它的表现非常糟糕:
import pandas as pd
def myfunc(**kwargs):
try:
area = kwargs.get('length', 0)* kwargs.get('width', 0)
return area
except TypeError:
return 'Error : length and width should be int or float'
df = pd.DataFrame({'length':[1,2,3], 'width':[10, 20, 30]})
for i in range(len(df)):
print myfunc(**df.iloc[i])
Run Code Online (Sandbox Code Playgroud)
关于如何提高性能的任何建议?我尝试使用 try 进行迭代df.iterrows()
,但出现以下错误:
类型错误:** 之后的 myfunc() 参数必须是映射,而不是元组
我也试过df.itertuples()
and df.values
,但要么我遗漏了一些东西,要么意味着我必须将每个元组/ np.array 转换为 pd.Series 或 dict ,这也会很慢。我的限制是脚本必须使用 python 2.7 和 pandas 0.14.1。
我有一些需要使用Python访问的.rda文件。我的代码如下所示:
import rpy2.robjects as robjects
from rpy2.robjects import r, pandas2ri
pandas2ri.activate()
df = robjects.r.load("datafile.rda")
df2 = pandas2ri.ri2py_dataframe(df)
Run Code Online (Sandbox Code Playgroud)
其中df2是熊猫数据框。但是,它仅包含.rda
文件的标题!我已经来回搜寻了。提出的所有解决方案似乎都没有用。
有谁知道如何有效地将.rda
数据框转换为熊猫数据框?
我刚刚注意到
isinstance(myob, MyClass)
Run Code Online (Sandbox Code Playgroud)
不仅返回True
whenmyob
是 的实例MyClass
,而且还返回 ifmyob
是继承自 的类的实例MyClass
。
为了更清楚,请考虑以下几点:
class Book(object):
def __init__(self, cover)
self._cover = cover
class Novel(Book):
def __init__(self, cover, category):
Book.__init__(self, cover)
self._category = category
Run Code Online (Sandbox Code Playgroud)
实例化Novel时如下:
novel = Novel('hardcover', 'police')
Run Code Online (Sandbox Code Playgroud)
然后
print(isinstance(novel, Book))
Run Code Online (Sandbox Code Playgroud)
和
print (isinstance(novel , Novel))
Run Code Online (Sandbox Code Playgroud)
两者都打印True
.
为什么会这样?在我看来,novel
这是一个Novel
实例,而不是Book
一个......
另外,与此相关:
为了获得“祖母”(原文如此)课程,我这样做:
print(novel.__class__.__bases__)
Run Code Online (Sandbox Code Playgroud)
有更直接的方法吗?