用无值连接两个系列(pandas DataFrame)?

时间:2015-12-16 00:55:19

标签: python pandas dataframe

我正在尝试连接pandas DataFrame中的两列。问题是当两个系列中都存在无值时,结果为NaN。 由于实际数据非常大并且保留原始None值以供以后参考,我希望不要更改列中的原始值。有没有办法在熊猫中实现这一目标?

创建示例DataFrame:

import pandas as pd
f = pd.DataFrame([['a', 'b','c','a', 'b','c'],['1', '2','3', '4', '5','6', ]])
f = f.transpose()
f.columns = ['xx', 'yy']
f.xx[0] = None
f.yy[0] = None
f.xx[2] = None
f.yy[3] = None

    xx      yy
0   None    None
1   b       2
2   None    3
3   a       None
4   b       5
5   c       6

我尝试了f['new_str'] = f.xx + f.yyf['new_str'] = f['xx'] + f['yy']。如果任何值为None类型,则将连接值设置为NaN。我认为这是由于pandas如何处理None类型。 None类型和str类型不是"可添加的"通过' +'运营商。

    xx      yy      new_str
0   None    None    NaN
1   b       2       b2
2   None    3       NaN
3   a       None    NaN
4   b       5       b5
5   c       6       c6

这是我想要做的:

f['new_str'] = f.xx.map(lambda x: '')
for idx, arow in f.iterrows():
    con = ''
    if arow.xx:
        con += arow.xx
    if arow.yy:
        con += arow.yy
    f.loc[idx,'new_str'] = con
f
    xx      yy      new_str
0   None    None    
1   b       2       b2
2   None    3       3
3   a       None    a
4   b       5       b5
5   c       6       c6  

我的问题是,pandas是否支持更优雅/简单的方法来实现这一目标?

1 个答案:

答案 0 :(得分:3)

在每列上调用fillna以将Nones设置为'',这是字符串连接下的标识元素。

f['new_str'] = f.xx.fillna('') + f.yy.fillna('')

这会以您想要的方式格式化新列:

>>> f
     xx    yy new_str
0  None  None        
1     b     2      b2
2  None     3       3
3     a  None       a
4     b     5      b5
5     c     6      c6