[英]Exclude NaNs when using pandas to_dict
我正在使用包含一些 NaN 的 Pandas DataFrame,例如:
import pandas as pd
import numpy as np
raw_data={'hostname':{1:'server1',2:'server2',3:'server3',4:'server4'},'nic':{1:'eth1',2:'eth1',3:'eth1',4:'eth1'},'vlan':{1:'100',2:np.nan,3:'200',4:np.nan}}
df=pd.DataFrame(raw_data)
df
hostname nic vlan
1 server1 eth1 100
2 server2 eth1 NaN
3 server3 eth1 200
4 server4 eth1 NaN
然后我應用一些過濾並創建一個字典:
my_dict = df.loc[df['hostname'] == 'server2'].drop('hostname', axis=1).to_dict(orient='records')
my_dict
[{'nic': 'eth1', 'vlan': nan}]
問題是我想在輸出字典中排除任何具有 NaN 值的鍵,因此 server2 的輸出將是:
my_dict
[{'nic': 'eth1']
我在這里找到了一個可能的解決方案: make pandas DataFrame to a dict and dropna
from pandas import compat
def to_dict_dropna(data):
return dict((k, v.dropna().to_dict()) for k, v in compat.iteritems(data))
my_dict=to_dict_dropna(df)
my_dict
{'nic': {1: 'eth1', 2: 'eth1', 3: 'eth1', 4: 'eth1'}, 'hostname': {1: 'server1', 2: 'server2', 3: 'server3', 4: 'server4'}, 'vlan': {1: '100', 3: '200'}}
但我不知道如何將此解決方案與我的其他過濾要求和使用 orient='records' 選項結合起來。
基本上我需要將上面的 to_dict_dropna 函數包含在我現有的熊貓選項字符串中。 任何人都可以提出解決方案嗎? 謝謝
在您的解決方案之后使用列表理解:
my_dict = (df.loc[df['hostname'] == 'server2']
.drop('hostname', axis=1)
.to_dict(orient='records'))
my_dict = [{k:v for k, v in x.items() if v == v } for x in my_dict]
print (my_dict)
[{'nic': 'eth1'}]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.