我有来自ImDB的演员表。
从该表中,我想删除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)]