簡體   English   中英

如何從熊貓數據框中僅選擇幾列

[英]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.

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