Python dask环境中变量到字符串的转换

Python dask环境中变量到字符串的转换,python,dataframe,dask,Python,Dataframe,Dask,我试图在dask环境中将变量名转换为字符串。这在正常的python环境中运行良好。但是,在创建daskdatarame之后运行该代码时,该代码不起作用。代码如下 来自dask.distributed import客户端 client=client() 将dask.dataframe作为dd导入 将numpy作为np导入 作为pd进口熊猫 df=pd.DataFrame({'A':['ant','ant','cherry','dog','ant'],'B':['animal','animal1',

我试图在
dask
环境中将变量名转换为字符串。这在正常的python环境中运行良好。但是,在创建
dask
datarame之后运行该代码时,该代码不起作用。代码如下

来自dask.distributed import客户端
client=client()
将dask.dataframe作为dd导入
将numpy作为np导入
作为pd进口熊猫
df=pd.DataFrame({'A':['ant','ant','cherry','dog','ant'],'B':['animal','animal1','fruit','animal','animal','animal','C':['small1','small1','small','big',np.nan])
ddf=dd.from_熊猫(df,npartitions=2)
ddf.head()
#由于上述代码,下面的代码给出了一个错误(请参见下面的**错误**)。下面的代码本身运行良好。
my_var=[2,'wew','eweweww','44']
[k表示k,v表示局部变量().items(),如果v==my_var][0]
编辑

# The expected output. It works on jupyter notebook without any modules 
# loaded. (It is the name of the list)
out []: 'my_var' 
错误如下

---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
~/env/lib/python3.5/site-packages/dask/dataframe/utils.py出现raise\u on\u meta\u错误(funcname,udf)
159尝试:
-->160产量
161例外情况除外,如e:
elemwise中的~/env/lib/python3.5/site-packages/dask/dataframe/core.py(op,*args,**kwargs)
3426出现raise_on_meta_错误(funcname(op)):
->3427元=部分按顺序(*部分,功能=操作,其他=其他)
3428
~/env/lib/python3.5/site-packages/dask/utils.py,按部分顺序(*args,**kwargs)
903 args2.插入(i,arg)
-->904返回函数(*args2,**kwargs)
905
f(self,other)中的~/env/lib/python3.5/site-packages/pandas/core/ops.py
2090
->2091其他=\u对齐\u方法\u框架(自身、其他、轴=无)
2092
~/env/lib/python3.5/site-packages/pandas/core/ops.py位于对齐方法框架中(左、右、轴)
1984年#GH17901
->1985右=to_系列(右)
1986
to_系列中的~/env/lib/python3.5/site-packages/pandas/core/ops.py(右)
1946 raise VALUERROR(消息格式(req_len=len)(左列),
->1947年(右)
1948 right=left.\u构造函数\u切片(right,index=left.columns)
ValueError:无法强制转换为序列,长度必须为3:给定4
在处理上述异常期间,发生了另一个异常:
ValueError回溯(最近一次调用上次)
在里面
1 my_var=[2,'wew','eweweww','44']
---->2[k表示k,v表示局部变量().items(),如果v==my_var][0]
英寸(.0)
1 my_var=[2,'wew','eweweww','44']
---->2[k表示k,v表示局部变量().items(),如果v==my_var][0]
~/env/lib/python3.5/site-packages/dask/dataframe/core.py in(self,other)
1199返回lambda self,other:elemwise(op,other,self)
1200其他:
->1201返回lambda self,其他:elemwise(op,self,其他)
1202
1203 def滚动(自、窗口、最小周期=无、频率=无、中心=假、,
elemwise中的~/env/lib/python3.5/site-packages/dask/dataframe/core.py(op,*args,**kwargs)
3425 else d._meta_dasks中d为非空]
3426出现raise_on_meta_错误(funcname(op)):
->3427元=部分按顺序(*部分,功能=操作,其他=其他)
3428
3429结果=新对象(图形、名称、元、分区)
/usr/lib/python3.5/contextlib.py in\uuuuuu exit\uuuuuu(self、type、value、traceback)
75值=类型()
76尝试:
--->77自生成抛出(类型、值、回溯)
78 raise RUNTIMERROR(“抛出()后生成器未停止”)
79除作为exc的停止迭代外:
~/env/lib/python3.5/site-packages/dask/dataframe/utils.py出现raise\u on\u meta\u错误(funcname,udf)
175                 "{2}")
176 msg=msg.format(“在`{0}`”中。如果funcname为else,则为format(funcname),repr(e),tb)
-->177提升值错误(msg)
178
179
ValueError:“eq”中的元数据推断失败。
原始错误如下:
------------------------
ValueError('无法强制转换为序列,长度必须为3:给定4',)
回溯:
---------
文件“/home/michael/env/lib/python3.5/site packages/dask/dataframe/utils.py”,第160行,在raise_on_meta_error中
产量
文件“/home/michael/env/lib/python3.5/site packages/dask/dataframe/core.py”,第3427行,在elemwise中
meta=部分按顺序排列(*部分,函数=op,其他=其他)
文件“/home/michael/env/lib/python3.5/site packages/dask/utils.py”,第904行,按部分顺序排列
返回函数(*args2,**kwargs)
文件“/home/michael/env/lib/python3.5/site packages/pandas/core/ops.py”,第2091行,f
其他=\u对齐\u方法\u框架(自身、其他、轴=无)
文件“/home/michael/env/lib/python3.5/site packages/pandas/core/ops.py”,1985行,在“对齐方法”框架中
右=至_系列(右)
文件“/home/michael/env/lib/python3.5/site packages/pandas/core/ops.py”,第1947行,在to_系列中
给定_len=len(右)))
有谁能在这件事上帮助我吗

谢谢


Michael

你的代码是一件非常奇怪的事情!由于您迭代了所有变量,如果发生的事情取决于定义了哪些变量,您不应该感到惊讶。特殊情况来自于询问是否
'wew'==df
,并且数据帧对等式的含义有非常具体的理解。这种情况也会发生在熊猫数据帧上,或者任何具有equals复杂实现的数据帧上

您可能只想针对字符串进行测试,因为您知道自己在寻找什么:

[k for k, v in locals().items() if isinstance(v, str) and v == my_var][0]

你的代码是一件非常奇怪的事情!由于您迭代了所有变量,如果发生的事情取决于定义了哪些变量,您不应该感到惊讶。特殊情况来自于询问是否
'wew'==df
,并且数据帧对等式的含义有非常具体的理解。这种情况会发生在平底锅上