我有以下 Dataframe :
import pandas as pd
import numpy as np
d1 = {'atom_number': ["12,14,24", "23", "14,25,46", 20.3 , np.nan, "15,24"]}
df = pd.DataFrame(data=d1)
df
atom_number
0 12,14,24
1 23
2 14,25,46
3 20.3
4 NaN
5 15,24
如果字符串是字符串,我想拆分字符串值。使用下面的代码,我得到一个AttributeError:
df['atom_number'] = [[int(x) if type(s) == str else np.nan for x in s.split(',')] for s in df.atom_number]
df = df.dropna(subset = ["atom_number"])
属性错误:“float”对象没有属性“split”
期望输出:
atom_number
0 [12, 14, 24]
1 [23]
2 [14, 25, 46]
3 [15, 24]
我知道我可以在对字符串值使用列表解析之前过滤df,但我想知道如何在列表解析中做到这一点。
2条答案
按热度按时间mlnl4t2r1#
用
isinstance
测试type
系列s
的值:您的解决方案:
或者对整数使用
map
:更复杂的解决方案是通过
,
移除拆分值中的浮点数,并保留单个整数:4nkexdtk2#
pandas有一个
.apply
方法,它可能比list-comp更适合修改pandas对象,如DataFrames或series,并且看起来更清晰。isinstance
看起来也比比较对象的类型更好。例如: