gpt4 book ai didi

python - 从列表字典中删除 'nan'

转载 作者:行者123 更新时间:2023-11-30 21:58:46 25 4
gpt4 key购买 nike

我的数据包含带有空行的列,pandas 将其读取为 nan。我想根据这些数据创建一个列表字典。但是,某些列表包含 nan,我想将其删除。

如果我在 data.dropna().to_dict(orient='list') 中使用 dropna(),这将删除至少包含一个的所有行nan,因此我丢失了数据。

Col1 Col2  Col3
a x r
b y v
c x
z



data = pd.read_csv(sys.argv[2], sep = ',')
dict = data.to_dict(orient='list')

Current output:
dict = {Col1: ['a','b','c',nan], Col2: ['x', 'y',nan,nan], Col3: ['r', 'v', 'x', 'z']}

Desire Output:
dict = {Col1: ['a','b','c'], Col2: ['x', 'y'], Col3: ['r', 'v', 'x', 'z']}

我的目标:获取列表的字典,并将 nan 从列表中删除。

最佳答案

不确定您所期望的格式,但您可以使用列表理解和 itertuples 来执行此操作。

首先创建一些数据。

import pandas as pd
import numpy as np

data = pd.DataFrame.from_dict({'Col1': (1, 2, 3), 'Col2': (4, 5, 6), 'Col3': (7, 8, np.nan)})
print(data)

给出数据框:

   Col1  Col2  Col3
0 1 4 7.0
1 2 5 8.0
2 3 6 NaN

然后我们使用迭代器创建字典。

dict_1 = {x[0]: [y for y in x[1:] if not pd.isna(y)] for x in data.itertuples(index=True) }

print(dict_1)
>>>{0: [1, 4, 7.0], 1: [2, 5, 8.0], 2: [3, 6]}

对列执行相同的操作甚至更容易:

dict_2 = {data[column].name: [y for y in data[column] if not pd.isna(y)] for column in data}

print(dict_2)
>>>{'Col1': [1, 2, 3], 'Col2': [4, 5, 6], 'Col3': [7.0, 8.0]}

关于python - 从列表字典中删除 'nan',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54803899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com