Python dtype('O') 。处理对象数据类型。转换为 string/integer

Python dtype('O') . Processing object data type. Converting to string/integer

我有 table 来自 ImDB 的演员。

从这个 table 我想删除所有缺少 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'

drop missing和apply >= 1950条件的方法是什么?

你的问题是你的 birthYear 系列的类型是对象,它适用于字符串或混合类型。

您首先要通过应用这样的函数来清理这个系列:

imdb_actors.birthYear = imdb_actors.birthYear.map(lambda x: int(x) if str(x) != '\N' else pd.np.nan)

然后你就可以进行过滤了:

imdb_actors[imdb_actors.birthYear >= 1955]

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

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

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

然后为您的 3 个条件创建掩码,通过矢量化 | "or" 运算符组合,通过 ~ 取反,并在您的数据帧上应用布尔索引:

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

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