无法比较类型"ndarray(dtype=int64)"和"str",同时尝试将数据帧值替换为映射中的值



我有一个字典,里面有两种不同的数据类型(int64和str(和一个数据帧。我正在尝试用dict中的值替换df第二列中的数据,如果它们匹配的话。

例如

Input:
map = {'Pop': [9, 11, 13], 'HipHop': [15, 19, 22], 'Unknown': '_'}

artist = {'Name': ['Taylor','Kanye','Alex'],'Reference': [9,15,_]}
df = pd.DataFrame(artist, columns = ['Name', 'Reference'])

Expected Output:
output_dict = {'Taylor': 'Pop', 'Kanye': 'HipHop', 'Alex': 'Unknown'}

我的代码如下:

df['Reference'] = df.Reference.astype('int64')
out = df.set_index('Name').Reference.replace({z : x for x , y in map.items() for z in y}).to_dict()
print(out)

我面临的问题是,如果我不将第二列转换为int64,我将无法使映射工作。然而,一旦我进行了转换,我就会得到一个无法比较类型的错误,因为其中一个字段是字符串。任何关于如何解决这个问题的提示都会很有帮助。谢谢

因为map是函数,而且python码字不使用变量map,所以最好像mapping一样更改。

然后用to_numericerrors='coerce'Reference转换为数字,如果字符串的值不正确,请使用Series.fillna替换缺失值的解决方案

mapping = {'Pop': [9, 11, 13], 'HipHop': [15, 19, 22], 'Unknown': '_'}

artist = {'Name': ['Taylor','Kanye','Alex'],'Reference': [9,15,'_']}
df = pd.DataFrame(artist, columns = ['Name', 'Reference'])
df['Reference'] = pd.to_numeric(df.Reference, errors='coerce')
out = (df.set_index('Name').Reference
.replace({z : x for x , y in mapping.items() for z in y})
.fillna('Unknown')
.to_dict())
print(out)
{'Taylor': 'Pop', 'Kanye': 'HipHop', 'Alex': 'Unknown'}

创建一个映射dict,然后应用于Reference列。

amap = {'Pop': [9, 11, 13], 'HipHop': [15, 19, 22], 'Unknown': '_'}
artist = {'Name': ['Taylor','Kanye','Alex'],'Reference': [9,15,'_']}
df = pd.DataFrame(artist, columns = ['Name', 'Reference'])
# create map dict
df_map = pd.DataFrame(amap).stack().reset_index()
map_dict = dict(zip(df_map[0], df_map['level_1']))
print(map_dict)
# {9: 'Pop', 15: 'HipHop', '_': 'Unknown', 11: 'Pop', 19: 'HipHop', 13: 'Pop', 22: 'HipHop'}
# apply map dict
df['amap'] = df['Reference'].map(map_dict)
dict(zip(df['Name'], df['amap']))
# {'Taylor': 'Pop', 'Kanye': 'HipHop', 'Alex': 'Unknown'}

最新更新