我目前有一个dataframe,它包含以下几列:
print(df.WIN_COUNTRY_CODE[180:200])
WIN_COUNTRY_CODE
180 IT
181 IT
182 ES
183 DE---UK---UK---UK---UK
184 UK---UK---UK---UK
185 DE---UK---UK---UK
186 UK---UK---DE---UK---UK
187 SI
188 UK
189 FR
该列的每个单元格都包含国家代码,每个记录可以有多个国家代码。 由于我想将国家代码从2个字母转换为3个字母的iso代码,并计算该国家的出现频率,因此我应用以下代码:
df['WIN_COUNTRY_CODE_2'] = df['WIN_COUNTRY_CODE'].str.split("---")
这将导致列如下所示:
print(df.WIN_COUNTRY_CODE[180:200])
WIN_COUNTRY_CODE
180 ['IT']
181 ['IT']
182 ['ES']
183 ['DE', 'UK', 'UK', 'UK', 'UK']
184 ['UK', 'UK', 'UK', 'UK']
185 ['DE', 'UK', 'UK', 'UK']
186 ['UK', 'UK', 'DE', 'UK', 'UK']
187 ['SI']
188 ['UK']
189 ['FR']
catdict= dict([(iso2,iso3) for iso2,iso3 in zip(cattable['iso_2_codes'], cattable['iso_3_codes'])])
df.assign(mapped=[[catdict[k] for k in row if catdict.get(k)] for row in df.WIN_COUNTRY_CODE_2])
但是,每当我应用映射时,它总是返回以下语句:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-13-df7aad8ca868> in <module>
1 cattable = pd.ExcelFile('D:/ROBERT LIBRARIES/Documents/ISD - LKPP Project/vardesc2.xlsx').parse('WIN_COUNTRY_CODE')
2 catdict= dict([(catnum,catdesc) for catnum,catdesc in zip(cattable['WIN_COUNTRY_CODE'], cattable['Description'])])
----> 3 df.assign(mapped=[[catdict[k] for k in row if catdict.get(k)] for row in df.WIN_COUNTRY_CODE])
<ipython-input-13-df7aad8ca868> in <listcomp>(.0)
1 cattable = pd.ExcelFile('D:/ROBERT LIBRARIES/Documents/ISD - LKPP Project/vardesc2.xlsx').parse('WIN_COUNTRY_CODE')
2 catdict= dict([(catnum,catdesc) for catnum,catdesc in zip(cattable['WIN_COUNTRY_CODE'], cattable['Description'])])
----> 3 df.assign(mapped=[[catdict[k] for k in row if catdict.get(k)] for row in df.WIN_COUNTRY_CODE])
TypeError: 'float' object is not iterable
似乎代码返回了一个错误,因为WIN\u COUNTRY\u code列中的条目仍然是字符串格式,而不是字符串列表。我通过以下代码检查列表中的对象后了解到:
df.WIN_COUNTRY_CODE_2[183][0]
它总是以字符串对象的形式返回一个字符,而不是两个字母的代码。你知道吗
'['
而我希望代码返回一个'DE'对象。 你知道吗
如何将WIN_COUNTRY_CODE
列从列表列转换为列表列?我怎样才能找到整个专栏中出现频率最高的国家?非常感谢。你知道吗
这也许会有帮助。你知道吗
输出
相关问题 更多 >
编程相关推荐