所以我遇到的问题是,我不确定如何在函数内调用字典。
<input type="text" class="form-control" id="na" name="na" maxlength="5" placeholder="NA" onkeyup="this.value = minmax(this.value, 0, 100)"/>
因此,我想将日期转换为数字,输出应能够遍历所有列和所有行,并读取字典并用程序中使用的字典中的适当值替换。输出应如下所示,
>>> play = pd.DataFrame(play)
>>> play
No Yes
0 Wednesday Monday
1 Thursday Tuesday
2 Saturday Friday
>>> days = 'Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'
>>> newdict = {}
>>> numbincrease = 0
>>> for i in days:
newdict[i] = numbincrease
numbincrease = numbincrease + 1
>>> print(newdict)
{'Monday': 0, 'Tuesday': 1, 'Wednesday': 2, 'Thursday': 3, 'Friday': 4, 'Saturday': 5}
我已经搜索了许多方法来执行此操作,但是它似乎不起作用。我不知道如何调用一个函数来遍历每一列,并将调用字典应用于该值,然后继续下一行或下一列。 请帮忙,谢谢
答案 0 :(得分:4)
pd.DataFrame.applymap
可用于将函数应用于数据框中的每个值。在这种情况下,适当的功能是dict.get
。
请注意,如下所示,您可以使用带有enumerate
的字典理解来有效地将天映射为整数。
days = ('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday')
daymap = {v: k for k, v in enumerate(days)}
res = df.applymap(daymap.get)
print(res)
No Yes
0 2 0
1 3 1
2 5 4
答案 1 :(得分:1)
尝试一下,.applymap
遍历数据框中的每个项目
play.applymap(lambda x: newdict[x])
编辑:@jpp的建议:
play.applymap(newdict.get)
答案 2 :(得分:1)
您可以这样做:
play = play.replace(newdict)
replace
和applymap
之间的区别在于,当df中的元素不在字典中时,使用replace
时,该元素将保持不变:
df:
No Yes
Wednesday Monday
Thursday Tuesday
a day Friday
与replace
:
No Yes
0 2 0
1 3 1
2 a day 4
有了applymap
,您将拥有NaN
:
No Yes
0 2.0 0
1 3.0 1
2 NaN 4