У меня есть один файл json об инвентаризации, где мне нужно выбрать несколько столбцов в качестве информационного кадра и отправить уведомление по электронной почте.
Ниже приведен код, который я пробовал:
import json
import pandas as pd
from pandas.io.json import json_normalize
with open('d:/facts.json') as f:
d = json.load(f)
mydata = json_normalize(d['ansible_facts'])
mydata.head(1)`
Его печать полностьюзаписи (на самом деле каждый json будет иметь только одну запись), но мне нужно показать / выбрать / отобразить только два столбца из dataframe.Может кто-нибудь предложить, пожалуйста, как просмотреть фрейм данных с выбранными столбцами
Обновление 1: Я могу генерировать необходимые столбцы сейчас, но работает только определенный столбец, но когда я упоминаю определенные столбцы, тоего высказывание "не в индексе" И также я могу иметь собственный ярлык заголовка собственного столбца во время печати? Работает
import json
import pandas as pd
from pandas.io.json import json_normalize
with open('d:/facts.json') as f:
d = json.load(f)
mydata = json_normalize(d['ansible_facts'])
mydata.columns = mydata.columns.to_series().apply(lambda x: x.strip())
df1=mydata[['ansible_architecture','ansible_distribution']]
Но когда я упоминаю столбец как имя хоста, ansible_distribution, его высказывание не в индексе. Не работает
import json
import pandas as pd
from pandas.io.json import json_normalize
with open('d:/facts.json') as f:
d = json.load(f)
mydata = json_normalize(d['ansible_facts'])
mydata.columns = mydata.columns.to_series().apply(lambda x: x.strip())
df1=mydata[['hostname','ansible_distribution']]
Ошибка: KeyError: "['hostname'] не в индексе"
Update2:
Теперь я могуУстранить эту проблему с помощью ниже, но мне нужны пользовательские метки в выходных данных, как это сделать
`import json
import pandas as pd
from pandas.io.json import json_normalize
with open('d:/facts.json') as f:
d = json.load(f)
mydata = json_normalize(d['ansible_facts'])
mydata.columns = mydata.columns.to_series().apply(lambda x: x.strip())
df1=mydata[['ansible_env.HOSTNAME','ansible_distribution']]`
Но мне нужно иметь настраиваемые метки столбцов в окончательном выводе, такие как Host, OSversion для вышеуказанного столбца, как я могу сделатьчто?
ОБНОВЛЕНИЕ 3 : теперь пытаюсь переименовать имя столбца перед его печатью, пробовал следующий код, но выдавал ошибку, такую как ошибка ключа, а не в индексе
import json
import pandas as pd
from tabulate import tabulate
from pandas.io.json import json_normalize
with open('/home/cloud-user/facts.json') as f:
d = json.load(f)
mydata = json_normalize(d['ansible_facts'])
mydata.columns = mydata.columns.to_series().apply(lambda x: x.strip())
mydata=mydata.rename(columns={"ansible_env.HOSTNAME": "HOSTNAME", "ansible_disrribution": "OSType"})
df1=mydata[['HOSTNAME','OSType']]
print(tabulate(df1, headers='keys', tablefmt='psql'))
Traceback (most recent call last):
File "ab7.py", line 21, in <module>
df1=mydata[['HOSTNAME','OSType']]
File "/usr/lib64/python2.7/site-packages/pandas/core/frame.py", line 2682, in __getitem__
return self._getitem_array(key)
File "/usr/lib64/python2.7/site-packages/pandas/core/frame.py", line 2726, in _getitem_array
indexer = self.loc._convert_to_indexer(key, axis=1)
File "/usr/lib64/python2.7/site-packages/pandas/core/indexing.py", line 1327, in _convert_to_indexer
.format(mask=objarr[mask]))
KeyError: "['HOSTNAME' 'OSType'] not in index"
Ноесли я не переименую, это работает отлично, но мне нужно наиболее читаемый столбец этикетки.Любое предложение, пожалуйста.без переименования кода вещи получают работу и вывод, как показано ниже на консоли
+----+------------------------+------------------------+
| | ansible_env.HOSTNAME | ansible_distribution |
|----+------------------------+------------------------|
| 0 | ip-xx-xx-xx-xx | SLES |
+----+------------------------+------------------------+
Теперь вместо anisble_env.HOSTNAME -> мне нужно lable в качестве HOSTNAME, а не ansible_distribution -> Мне нужно OSType, любое предложение, пожалуйста
Обновление 4:
Я исправил проблему с ниже
df.rename(columns={'ansible_hostname':'HOSTNAME','ansible_distribution':'OS Version','ansible_ip_addresses':'Private IP','ansible_windows_domain':'FQDN'},inplace=True)