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

时间:2018-09-05 15:19:16

标签: python pandas dataframe object-type

我有来自ImDB的演员表。

enter image description here

我要从此表中删除 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条件的方式是什么?

2 个答案:

答案 0 :(得分:2)

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

beginSheet:completionHandler:

指定NSWindow会将不可转换的元素强制为NSMutableArray

然后为您的3个条件创建掩码,通过矢量化的removeAllObjects“或”运算符组合,通过num_cols = ['birthYear', 'deathYear'] df[num_cols] = df[num_cols].apply(pd.to_numeric, errors='coerce') 求反,然后在数据帧上应用布尔索引:

errors='coerce'

答案 1 :(得分:0)

您的问题是您的birthYear年份的类型是Object,它将用于字符串或类型的混合。

您首先需要通过应用如下函数来清理该系列:

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]