[英]How to select only few columns from pandas dataframe
我有一個有關ansible廣告資源的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將只有一個記錄),但是我只需要顯示/選擇/顯示數據框中的兩列。 有人可以建議如何查看帶有選定列的數據框嗎
更新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:“ ['主機名']不在索引中”
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)的最終輸出中有自定義columname標簽,以上該列,我該怎么做?
更新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->我需要將標簽命名為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)
通過將列表傳遞給它來選擇多個列作為DataFrame:
df[['col_name1', 'col_name2']]
有關更多信息,請嘗試以下鏈接: https : //medium.com/dunder-data/selecting-subsets-of-data-in-pandas-6fcd0170be9c
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.