簡體   English   中英

使用python訪問函數內的字典

[英]access dictionary inside a function using python

所以我遇到的問題是,我不確定如何在函數內調用字典。

>>> 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}

因此,我想將日期轉換為數字,輸出應該能夠遍歷所有列和所有行,並讀取字典並用程序中使用的字典中的適當值替換。 輸出應如下所示:

>>> play
      No      Yes
0     2        0
1     3        1
2     5        4  

我已經搜索了許多方法來執行此操作,但是它似乎沒有用。 我不知道如何調用一個函數來遍歷每一列,並將調用字典應用於該值,然后繼續下一行或下一列。 請幫忙,謝謝

pd.DataFrame.applymap可用於將函數應用於數據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

試試這個, .applymap遍歷數據.applymap每個項目
play.applymap(lambda x: newdict[x])


編輯:@jpp的建議:
play.applymap(newdict.get)

您可以這樣做:

play = play.replace(newdict)

replaceapplymap之間的區別在於,當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 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM