tan qiang
tan qiang

Reputation: 11

pandas str in list ,change it's type

my data

df = pd.DataFrame({"id":['1,2,3,4','1,2,3,6'], "sum": [6,7]})

mycode:

df['id']=df['id'].str.split(',')

df['nf']=df.apply(lambda x: set(range(1,x['sum']+1))-set(x['id'])  , axis=1)

print(df)

i want output

             id  sum         nf
0  [1, 2, 3, 4]    6     {5, 6}
1  [1, 2, 3, 6]    7  {4, 5, 7} 

but it output

             id  sum                     nf
0  [1, 2, 3, 4]    6     {1, 2, 3, 4, 5, 6}
1  [1, 2, 3, 6]    7  {1, 2, 3, 4, 5, 6, 7}

i think the 'num' in the list is actually str but i don't known how to easily modify it by pandas

Upvotes: 1

Views: 40

Answers (1)

jezrael
jezrael

Reputation: 862591

Use map for convert values to integers:

df['nf']=df.apply(lambda x: set(range(1,x['sum']+1))-set(map(int, x['id']))  , axis=1)
print(df)
             id  sum         nf
0  [1, 2, 3, 4]    6     {5, 6}
1  [1, 2, 3, 6]    7  {4, 5, 7}

Upvotes: 2

Related Questions