格式化字符串时替换行

时间:2018-10-19 10:17:20

标签: python pandas dataframe

我有一个这样的熊猫数据框:

    Date  Miles  Kilomètres               Commentaires
0  07/04     17          27                    string1
1  08/04     22          35                        NaN
2  09/04     19          31                    string2
3  10/04     20          32                    string2
4  11/04      7          11      Another random string

如果Date不是Commentaires,我想串联列CommentairesNan

    Date  Miles  Kilomètres                       Commentaires
0  07/04     17          27                    07/04 - string1
1  08/04     22          35                                NaN
2  09/04     19          31                    09/04 - string2
3  10/04     20          32                    10/04 - string2
4  11/04      7          11      11/04 - Another random string

以下代码段运行良好:

df.loc[(pd.notnull(df.Commentaires), 'Commentaires')] = df.Date + " - " + df.Commentaires

但这不是很pythonic。我宁愿那样做:

df.loc[(pd.notnull(df.Commentaires), 'Commentaires')] = "{Date} - {Commentaires}".format(df)

但是我有一个KeyError: 'Date'

其他解决方案,其他问题:

df.loc[(pd.notnull(df.Commentaires), 'Commentaires')] = "{} - {}".format(df.Date, df.Commentaires)

print(df.head())
    Date  Miles  Kilomètres                                       Commentaires
0  07/04     17          27  0      07/04\n1      08/04\n2      09/04\n3   ...
1  08/04     22          35                                                NaN
2  09/04     19          31  0      07/04\n1      08/04\n2      09/04\n3   ...
3  10/04     20          32  0      07/04\n1      08/04\n2      09/04\n3   ...
4  11/04      7          11  0      07/04\n1      08/04\n2      09/04\n3   ...

如何以最pythonic的方式获得想要的结果?

2 个答案:

答案 0 :(得分:1)

您可以删除布尔掩码:

df['Commentaires'] = df.Date + " - " + df.Commentaires

print (df)
    Date  Miles  Kilometres                   Commentaires
0  07/04     17          27                07/04 - string1
1  08/04     22          35                            NaN
2  09/04     19          31                09/04 - string2
3  10/04     20          32                10/04 - string2
4  11/04      7          11  11/04 - Another random string

答案 1 :(得分:0)

通常,合并列时zip非常强大。但是,对于要删除的na值,解决方案将更加复杂。符合以下条件的

df['Commentaires'] = [' - '.join(i) if np.nan not in i else np.nan 
                         for i in zip(df['Date'],df['Commentaires'])]