从字典中提取值作为数据框列中的记录



我有一个数据框架,它有几个列,值作为字典。这些列还包含一些None(不确定它是字符串还是只是缺少值)。

df = pd.DataFrame([[{0: 300}, {0: 157}, {0: 456}],[{0: 298}, None, {0: 498}],[None, None, {0: 987}]],   columns=['col1', 'col2', 'col3'])

所有字典的key = 0, values = 100到10000之间的数字

我需要循环遍历所有列和行,并只提取值。最好只使用

值覆盖列。那么,最终结果应该是这样的:

df = pd.DataFrame([[300, 157, 456],[298, None, 498],[None, None, 987]],   columns=['col1', 'col2', 'col3'])

这个数字实际上是一个ID,稍后我将在"vlookup"中使用它。到另一个数据帧

我尝试了lambda函数:

df['col1'] = df['col1'].apply(lambda x: x.values() if x is not None else x)

我确实设法提取了值。问题是这些值的类型被识别为字典值(当我打印它们时它们看起来是这样的:(300))。

我需要它们是整数。我尝试链接一个类型(int),但我确实得到一个错误(类似于,你不能在字典的值上这样做)任何想法吗?

使用DataFrame.applymap处理所有具有dict values的get first values的列:

df = df.applymap(lambda x: list(x.values())[0] if isinstance(x, dict) else x)
print (df)
col1   col2  col3
0  300.0  157.0   456
1  298.0    NaN   498
2    NaN    NaN   987

如果需要整数,将值转换为Int64:

df = (df.applymap(lambda x: list(x.values())[0] if isinstance(x, dict) else x)
.astype('Int64'))
print (df)
col1  col2  col3
0   300   157   456
1   298  <NA>   498
2  <NA>  <NA>   987

最新更新