【发布时间】:2018-02-08 16:10:44
【问题描述】:
我正在处理来自 csv 文件的数据集。
我用这个dic = df.to_dict()将数据导入字典
这很好用,但由于数据的结构方式,我得到了一个字典字典。嵌套字典有多个“nan”值。我需要删除所有 nan 值,并且字典可以保持嵌套,或者我可以使用普通字典。
字典中的数据以这种格式打印出来:
{'1/13/2018': {0: 'Monday', 1: 'Red', 2: 'Violet', 3: 'Aqua', 4: 'Pink', 5: 'White', 6: nan, 7: nan, 8: nan},
这是我的代码示例:
df = pd.read_csv(infile, parse_dates=True, infer_datetime_format=True)
dic = df.to_dict()
我已经尝试了here 的建议,并尝试通过一些理解来做到这一点,但我认为由于嵌套的性质,我不知道如何适应它。
我也试过这样循环:
value_list = []
key_list = []
for k, v in dic.items():
key_list.append(k)
for c, q in v.items():
if str(q) != 'nan':
value_list.append(q)
else:
pass
我希望通过这个我可以从两个列表中创建一个新的 dic。然而,数据模糊在一起,很难分离值集。必须有更好的pythonic方式来做到这一点。
【问题讨论】:
-
在调用
df.to_dict之前删除nan 怎么样?看看pandas.DataFrame.dropna。 -
@Graipher 这看起来像我需要的,但它不能正常工作。当我申请使用它时,所有的 nans 都在下降,但大多数值也是如此。现在每个键只返回 1 个值
-
如果没有看到你的数据框,很难说为什么它不起作用。也许您只是缺少正确的
axis参数。 -
@Graipher 我认为 dics 的嵌套性质搞砸了。我将 index 设置为 1 并且它工作但只返回了 20 多个键中的三个。当我将其设置为 0 时,我会得到以前的行为
-
我认为我得到减少结果的原因是因为 dropna 正在删除整个列或行。我只需要一列中的 nan,而不是整个列
标签: python python-3.x dictionary dictionary-comprehension