我有来自ImDB的演员表。

python - Python dtype('O')处理对象数据类型。转换为字符串/整数-LMLPHP

从该表中,我想删除imdb_actors.birthYear丢失或小于1950年的所有行,还删除imdb_actors.deathYear具有某些值的行。

想法是获得一个活着但尚未退休的演员的数据集。

imdb_actors.birthYear.dtype
Out:dtype('O')


而且我无法转换为字符串,这无济于事:imdb_actors['birthYear'] = imdb_actors['birthYear'].astype('|S')。整年都毁了。

这就是为什么我无法执行:imdb_actors[imdb_actors.birthYear >= 1955]
当我尝试imdb_actors.birthYear.astype(str).astype(int)时,我收到消息:ValueError: invalid literal for int() with base 10: '\\N'

丢掉并应用> = 1950条件的方式是什么?

最佳答案

首先将数字数据转换为数字序列:

num_cols = ['birthYear', 'deathYear']
df[num_cols] = df[num_cols].apply(pd.to_numeric, errors='coerce')


指定errors='coerce'会将不可转换的元素强制为NaN

然后为您的3个条件创建掩码,通过矢量化的|“或”运算符组合,通过~求反,并对数据框应用布尔索引:

m1 = df['birthYear'].isnull()
m2 = df['birthYear'] < 1950
m3 = df['deathYear'].notnull()

res = df[~(m1 | m2 | m3)]

09-13 12:26