我正在尝试:
def processor(self, col):
# Some work here
col.fillna(0, inplace=True)
return col
def main(df):
pool = Pool(self.cpu_size)
for series_obj, data in pool.imap(
processor, [df[i] for i in df[col_list]]):
print(bool(series_obj.is_copy))
print(bool(df.is_copy))
df[series_obj.name] = series_obj
但我收到警告:
正在尝试在DataFrame的切片副本上设置值。
如何在没有此警告的情况下对DataFrame和Series对象执行相同的操作?
p.s。:可能是处理series_obj是初始df中的一列的提示,但print(bool(series_obj.is_copy))返回False,print(bool(df.is_copy))返回True。
问题出在使用链式索引创建的df参数中。
答案 0 :(得分:1)
只要series_obj
具有兼容索引,您尝试执行的操作就没有错。
问题在于你如何构建df
。它是以这样的方式创建的,它被标记为另一个数据帧的视图。您可以输入bool(df.is_copy)
来验证这一点。它应该回来True
因此,请让df
不再是一个视图:
df = df.copy()
这将把它与其形成的其他数据帧区分开来。请注意,如果你想要这种纠缠,它将不再是!
然后你可以
df[series_obj.name] = series_obj
旁注:我实际上无法在0.20
中重新创建df_source = pd.DataFrame(1, list('abc'), list('xyz'))
df = df_source[['x', 'z']]
series_obj = pd.Series(2, list('abc'))
print(bool(df.is_copy))
df[series_obj.name] = series_obj
print(bool(df.is_copy))
True
False
答案 1 :(得分:0)
问题出在使用链式索引创建的df参数中。但是在执行main函数期间出现错误。