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)]
我有 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)]