python - 无法在带有熊猫的元组列表中用 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 中填充缺失值的通用解决方案。
解决方案
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
推荐阅读
- java - 如何在 Github 包中添加我的 Android 库的依赖项?
- c++ - 确定polindrome字符串的问题
- c# - 在 C# 中配置 BrowserMobProxy
- java - 如何禁用motionLayout过渡?
- c# - .Net Core JSON 响应被截断
- arrays - 如何使用powershell获取数组中的特定字符串?
- c# - C# WPF 通过 XAML 动态创建和绑定组合框
- jquery - 如何从 Jquery Ajax POST 请求中获取数据
- c - 我需要减少项目中使用的所有目标文件的文本段
- bash - 简单(但很长)bash函数中的分段错误(核心转储)