我有一个数据框架,它有几个列,值作为字典。这些列还包含一些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