2012-08-08 15 views
47

मैं एक निम्नलिखित है DataFrame:पांडा: स्ट्रिंग कम्बाइन और int कॉलम

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

यह इस तरह दिखता है:

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

:

bar foo 
0 1 a 
1 2 b 
2 3 c 

अब मैं कुछ ऐसा करना चाहते हैं इसे कैसे प्राप्त किया जा सकता है? मैं निम्नलिखित की कोशिश की:

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

लेकिन यह मुझे एक गलत परिणाम देता है:

>>>print df.ix[0] 

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

एक गूंगा प्रश्न के लिए क्षमा करें, लेकिन यह एक pandas: combine two columns in a DataFrame मेरे लिए उपयोगी नहीं था।

उत्तर

32

आपके कोड में समस्या यह है कि आप प्रत्येक पंक्ति पर ऑपरेशन लागू करना चाहते हैं। जिस तरह से आपने इसे लिखा है, वह पूरे 'बार' और 'foo' कॉलम लेता है, उन्हें तारों में परिवर्तित करता है और आपको एक बड़ी स्ट्रिंग देता है। आप इसे पसंद लिख सकते हैं:

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

यह अन्य जवाब से अधिक है, लेकिन अधिक सामान्य है (मानों तार नहीं कर रहे हैं के साथ प्रयोग किया जा सकता है)।

9

तुम भी इस्तेमाल कर सकते हैं

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 
संबंधित मुद्दे