簡體   English   中英

如何在 csv 文件中將一列拆分為單獨的列?

[英]how do I split a column into seperate columns in a csv file?

所以我正在研究一個電影流派數據集,該數據集在一個列中包含所有流派,但我想將它們拆分。

這是數據集的樣子:

   genres
----------------------------------------------
   [{'id': 16, 'name': 'Animation'}, {'id': 35, 'name': 'Comedy'}, {'id': 10751, 'name': 'Family'}]
   [{'id': 35, 'name': 'Comedy'}, {'id': 10749, 'name': 'Romance'}]
   [{'id': 35, 'name': 'Comedy'}, {'id': 18, 'name': 'Drama'}, {'id': 10749, 'name': 'Romance'}]
   [{'id': 35, 'name': 'Comedy'}]
   [{'id': 28, 'name': 'Action'}, {'id': 80, 'name': 'Crime'}, {'id': 18, 'name': 'Drama'}, {'id': 53, 'name': 'Thriller'}]

所以我想做的是只獲取第一個流派,所以新列應該如下所示:

  genres
_____________
  Animation
  Comedy
  Comedy
  Comedy
  Action

在此處輸入圖像描述

我希望這足以理解我的問題。

使用DataFrame.apply 在每個單元格中選擇列表中的第一個字典。 從該字典中選擇name字段:

df['genres']=df['genres'].apply(lambda x: x[0]['name'])
print(df)

   ID     genres
0   0  Animation
1   1     Comedy
2   2     Comedy
3   3     Comedy
4   4     Action

或者

df['genres']=df['genres'].apply(lambda x: eval(x)[0]['name'])

嘗試這個

def decode_str_dict(x):
    try:
        out=eval(x)[0]['name']
    except Exception:
        try:
            out=eval(x)['name']
        except Exception:
            try:
                out=eval(x)
            except Exception:
                out=x
    return out



df['genres'].apply(decode_str_dict)
df['genres'] = df['genres'].map(lambda x:[i['name'] for i in x])
df['first_genre'] = df['genres'][0]
df = df[['name','first_genre']]

如果這些值被視為字符串,則此方法有效。

from ast import literal_eval

df['genres'] = df.genres.map(lambda x: literal_eval(x)[0]['name'])

結果:

Out[294]: 
  ID     genres
1  0  Animation
2  1     Comedy
3  2     Comedy
4  3     Comedy
5  4     Action

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM