如何在csv文件中将一列拆分为单独的列?

时间:2019-10-13 18:53:20

标签: python pandas dataframe

所以我正在研究电影流派数据集,并且数据集将所有流派都放在一列中,但是我想将它们拆分。

数据集的外观如下:

   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

enter image description here

我希望这很清楚可以理解我的问题。

3 个答案:

答案 0 :(得分:5)

使用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)

答案 1 :(得分:3)

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

答案 2 :(得分:3)

如果将值视为字符串,则此方法有效。

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