dframe = pd.DataFrame({"A":List("abcde"),"B":List("aabbc"),"C":[1,2,3,4,5]},index=[10,11,12,13,14]) A B C10 a a 111 b a 212 c b 313 d b 414 e c 5
我想要的输出:
A B C a b c10 a a 1 1 None None11 b a 2 2 None None12 c b 3 None 3 None13 d b 4 None 4 None14 e c 5 None None 5
想法是根据“B”列中的值创建新列,复制“C”列中的相应值并将其粘贴到新创建的列中.
这是我的代码:
lis = sorted(List(dframe.B.unique()))#creating empty columnsfor items in lis: dframe[items] = None #here copy and pasting for items in range(0,len(dframe)): slot = dframe.B.iloc[items] dframe[slot][items] = dframe.C.iloc[items]
我最终得到了这个错误:
SettingWithcopyWarning: A value is trying to be set on a copy of a slice from a DataFrameSee the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.HTML#indexing-vIEw-versus-copy app.launch_new_instance()
此代码在Python 2.7中运行良好,但在3.x中运行不佳.我哪里错了?
解决方法 从…开始to_be_appended = pd.get_dummIEs(dframe.B).replace(0,np.nan).mul(dframe.C,axis=0)
然后结束
dframe = pd.concat([dframe,to_be_appended],axis=1)
好像:
print dframe A B C a b c10 a a 1 1.0 NaN NaN11 b a 2 2.0 NaN NaN12 c b 3 NaN 3.0 NaN13 d b 4 NaN 4.0 NaN14 e c 5 NaN NaN 5.0
搜索注意事项.
这是将一个热编码与广播乘法相结合.
总结以上是内存溢出为你收集整理的Python:SettingWithCopyWarning:尝试在DataFrame的切片副本上设置值全部内容,希望文章能够帮你解决Python:SettingWithCopyWarning:尝试在DataFrame的切片副本上设置值所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)