我有一个代码,检查一列是否包含一个列表,如果发现它将爆炸该列表,并将爆炸列转换为int
,如果它是数字。然而,我遇到了一个问题,因为我的文件中的一些列表包含字典。我如何将它包含到现有代码中以检查列表是否包含字典/键,如果是,它不应该爆炸该列并保持原样。
当前代码:
x = (doc.applymap(type) == list).all()
y = x.index[x].tolist()
for i in y:
doc= doc.explode(i)
if (doc[i].str.isnumeric().all()) == True:
x = (doc[i].to_frame().columns)
doc[x] = doc[x].fillna(0).astype(int)
输入:
ID
"number": [1,2,3,4],
"number": [{"enabled": 1,2,3,4}]
预期输出
ID
1
2
3
4
[{"enabled": 1,2,3,4}]
可能不是最好的方法,但这是可行的:
for i in y:
m = str(doc[i][0]).strip('[]')
if m[0] == '{' and m[-1] == '}':
pass
else:
doc = doc.explode(i)
if (doc[i].str.isnumeric().all()) == True:
x = (doc[i].to_frame().columns)
doc[x] = doc[x].fillna(0).astype(int)
我不完全确定你想做什么,但这就是你如何检查字典是否在列表中。
如果列表包含字典,上面的一个只返回True
或False
,第二个返回项本身。
mylist = [1, 2, 3,{"key":"value"} 4, 5]
if any(type(x) is dict for x in mylist):
#List contains a dict
else:
#do other stuff
for x in mylist:
item_type = type(x)
if(item_type is dict):
#item is dict
else:
#item is not dict