2012-08-08 113 views
47

我有一个下列DataFrame熊猫:将字符串和int的列

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

它看起来像这样:

bar foo 
0 1 a 
1 2 b 
2 3 c 

现在我想有这样的:

 bar 
0 1 is a 
1 2 is b 
2 3 is 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不妄作。

回答

81

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

32

代码中的问题是您想要在每一行上应用该操作。你写过的方式需要整个'bar'和'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