数据帧:将字符串列转换为列表列

2024-04-25 15:22:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前有一个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代码,并计算该国家的出现频率,因此我应用以下代码:

1。我用3-dash分隔字符串,将countrycode从字符串转换为列表:

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']

2。我应用映射方法将转换表(cattable)中的2个字母的国家代码转换为3个字母的国家代码,并使其成为字典类型(catdict)

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列从列表列转换为列表列?我怎样才能找到整个专栏中出现频率最高的国家?非常感谢。你知道吗


Tags: 字符串代码indffor字母codede
2条回答

这也许会有帮助。你知道吗

df['new_WIN_COUNTRY_CODE']=df['WIN_COUNTRY_CODE'].map(lambda x: x.split(" -") if " -" in x else [x])

print(df)
df1=df.copy()
df1["WIN_COUNTRY_CODE"]=df['WIN_COUNTRY_CODE'].str.split(' -')
df1["Max_code"]=df1["WIN_COUNTRY_CODE"].apply(lambda x: max(set(x), key = x.count))

输出

enter image description here

相关问题 更多 >