2012-08-08 24 views
47

Ben DataFrame vardır:Pandalar: dize birleştirin ve int sütunlar

from pandas import * 
df = DataFrame({'foo':['a','b','c'], 'bar':[1, 2, 3]}) 

Bu şuna benzer:

 bar 
0 1 is a 
1 2 is b 
2 3 is c 

:

bar foo 
0 1 a 
1 2 b 
2 3 c 

Şimdi böyle bir şey yapmak istiyorum Bunu nasıl başarabilirim? Aşağıdaki çalıştı:

df['foo'] = '%s is %s' % (df['bar'], df['foo']) 

ama bana yanlış sonuç verir: Bir aptal soru için

>>>print df.ix[0] 

bar             a 
foo 0 a 
1 b 
2 c 
Name: bar is 0 1 
1 2 
2 
Name: 0 

Maalesef bu bir pandas: combine two columns in a DataFrame benim için yardımcı olmadı.

cevap

81

df['bar'] = df.bar.map(str) + " is " + df.foo.

32

Kodunuzdaki sorun, işlemi her satıra uygulamak istediğinizdir. Yazdığınız yol, tüm 'çubuk' ve 'foo' sütunlarını alır, onları dizelere dönüştürür ve size büyük bir ip verir. Bunu gibi yazabilirsiniz:

df.apply(lambda x:'%s is %s' % (x['bar'],x['foo']),axis=1) 

diğer cevap daha uzun ama daha genel olduğu (dize olmayan değerlerle kullanılabilir).

9

Ayrıca kullanabilirsiniz

df['bar'] = df['bar'].str.cat(df['foo'].values.astype(str), sep=' is ') 
3
df.astype(str).apply(lambda x: ' is '.join(x), axis=1) 

0 1 is a 
1 2 is b 
2 3 is c 
dtype: object 
İlgili konular