извлечение значения из словаря с надписью «timestamp»

#python #pandas #dictionary #timestamp

#python #pandas #словарь #временная метка

Вопрос:

Допустим, у меня есть этот словарь (с использованием метки времени pandas):

 d = {Timestamp('2020-06-30 00:00:00'): {'intangibleAssets': 295, 'capitalSurplus': 415},Timestamp('2020-03-30 00:00:00'): {'intangibleAssets': 400, 'capitalSurplus': 50}}
  

Как я могу извлечь одно значение, например, 295, расположенное в d[«Метка времени(‘2020-06-30 00:00:00’)»][» Нематериальные активы»]?

Большое спасибо!

Ответ №1:

Используйте pd.Timestamp , потому что наш тип ключа словаря pd.Timestamp не str .

 import pandas as pd
d[pd.Timestamp('2020-06-30 00:00:00')]["intangibleAssets"]
295
  

Ответ №2:

Поскольку вы используете pandas, вы можете преобразовать во фрейм данных и использовать loc или .iloc , передавая интересующие вас строку и столбец:

с .loc :

 d = {'2020-06-30 00:00:00': {'intangibleAssets': 295, 'capitalSurplus': 415},'2020-03-30 00:00:00': {'intangibleAssets': 400, 'capitalSurplus': 50}}
df = pd.DataFrame(d).loc['intangibleAssets','2020-06-30 00:00:00']
df
295
  

или iloc :

 d = {'2020-06-30 00:00:00': {'intangibleAssets': 295, 'capitalSurplus': 415},'2020-03-30 00:00:00': {'intangibleAssets': 400, 'capitalSurplus': 50}}
df = pd.DataFrame(d).iloc[0,0]
df
295
  

Комментарии:

1. Спасибо, это здорово, но, к сожалению, у меня много dict `, каждый в разном порядке…

Ответ №3:

Приведенная ниже функция является общей и может быть реализована в любом количестве словарей.
Чтобы получить ключи:

 def matchingKeys(dictionary, searchString):
    return [key for key,val in dictionary if searchString in val]
  

Чтобы получить значения:

 def matchingValues(dictionary, searchString):
    return [val for key,val in dictionary if searchString in val]
  

Чтобы получить оба:

 def matchingElements(dictionary, searchString):
    return {key:val for key,val in dictionary if searchString in val}