首页 > 解决方案 > 无法在带有熊猫的元组列表中用 0 替换空值

问题描述

我有一个如下所示的数据

data = [[('A', 204.593564568), ('B', 217.421341061), ('C', 237.296250326), ('D', 217.464281998), ('E', 206.329901299)], [('F', 210.297625953), ('G', 228.117692718), ('H', 4), ('I', 265.319671257), ('K',)]]

这只是我提取的数据的一小部分。如您所见, 没有可用的值K。所以我认为。也许我可以使用熊猫来解决这个问题。所以我这样做

import pandas as pd
import numpy as np

df = pd.Dataframe(data).fillna(0)

现在我无法使用df.fillna(0),因为None数据中没有。

所以我尝试df.replace(r'^\s*$', np.nan, regex=True)了用 a 删除任何空字符串,None但即使这样也无济于事。

那么我该怎么做才能填补缺失的数据呢?

注意:我不必总是以这种格式接收数据。我也可能收到这种格式的

data = [('F', 210.297625953), ('G', 228.117692718), ('H', 4), ('I', 265.319671257), ('K',)]

我正在寻找的是在 pandas 中填充缺失值的通用解决方案。

标签: pythonpandas

解决方案


使用pd.applymap

df.applymap(lambda x: (x[0],0) if len(x) == 1 else x)

                    0                   1                   2  \
0  (A, 204.593564568)  (B, 217.421341061)  (C, 237.296250326)   
1  (F, 210.297625953)  (G, 228.117692718)              (H, 4)   

                    3                   4  
0  (D, 217.464281998)  (E, 206.329901299)  
1  (I, 265.319671257)              (K, 0) 

替代..since 编辑

你为什么不展平你的元组,见下文(使用np.flatten

data = list(np.array(data).flatten()) #since it can be list of list or a list
##data
[('A', 204.593564568),
 ('B', 217.421341061),
 ('C', 237.296250326),
 ('D', 217.464281998),
 ('E', 206.329901299),
 ('F', 210.297625953),
 ('G', 228.117692718),
 ('H', 4),
 ('I', 265.319671257),
 ('K',)]

进而,

pd.DataFrame(data).fillna(0)

   0           1
0  A  204.593565
1  B  217.421341
2  C  237.296250
3  D  217.464282
4  E  206.329901
5  F  210.297626
6  G  228.117693
7  H    4.000000
8  I  265.319671
9  K    0.000000

推荐阅读