Petr Petrov Petr Petrov - 14 days ago 5
Python Question

Pandas: convert type of column

I have a dataframe with column

category
0 [Рубрики/Hi-Tech/Интернет/Универсальное/ ]
1 [/Рубрики/Бизнес/Недвижимость/Базы недвижимост...
2 []
3 [/Рубрики/Бизнес/Недвижимость/Базы недвижимост...
4 [Рубрики/Hi-Tech/Интернет/Универсальное/ ]
5 []
6 [Рубрики/Hi-Tech/Интернет/Универсальное/ ]
7 [/Рубрики/Бизнес/Недвижимость/Базы недвижимост...
8 [Рубрики/Hi-Tech/Интернет/Универсальное/ ]
9 [/Рубрики/Бизнес/Недвижимость/Базы недвижимост...
10 [Рубрики/Hi-Tech/Интернет/Универсальное/ ]
11 [/Рубрики/Бизнес/Недвижимость/Базы недвижимост...
12 []
13 [/Рубрики/Бизнес/Недвижимость/Базы недвижимост...
14 [Рубрики/Hi-Tech/Интернет/Универсальное/ ]


There are lists in column. I need to get first string from every list, but some of lists are empty and when I try to use

df.category.iloc[0]


I get


ValueError: Length of values does not match length of index


How can I fix that error and get strings instead of lists?

Answer

I think you can use indexing with str:

df.category = df.category.str[0]  

Sample:

df = pd.DataFrame({'category': [['aw','be'],[],['tr','yt','uy'],['tre']]})
print (df)
       category
0      [aw, be]
1            []
2  [tr, yt, uy]
3         [tre]

df.category = df.category.str[0]  
print (df)
  category
0       aw
1      NaN
2       tr
3      tre

If need replace NaN with empty string:

df.category = df.category.str[0].fillna('')
print (df)
  category
0       aw
1         
2       tr
3      tre