NaN是否会干扰熊猫中的列串联?

时间:2019-07-19 15:06:02

标签: python pandas concatenation

我正在尝试合并包含字符串和Nans的两列。 当我尝试合并它们时,我无法处理nan值。

df['col3] = df['col1'] + df['col2']

仅返回我的col2值

df['col3'] = df['col1'].map(str) + df['col2'].map(str)

让我的兄弟们彼此依恋。

如果我不使用.map(str),则.nan值根本不会串联。

是否有一种方法可以串联两个数据框列,因此如果它们中的任何一个是nan,则它们不会被串联。除非两者都是nan,否则我确实希望返回nan。

示例:

df
col0    col1    col2    col3
X       A       nan     A
Y       nan     B       B
Z       nan     nan     nan
W       ''      B       B

4 个答案:

答案 0 :(得分:3)

您可以在最后两列和ffill上进行索引:

df['col3'] = df[['col1', 'col2']].ffill(1).col2

   col0 col1 col2 col3
0    X    A  NaN    A
1    Y  NaN    B    B
2    Z  NaN  NaN  NaN
3    W   ''    B    B

答案 1 :(得分:1)

这是fillna

df['col3']=df.col2.fillna(df.col1)

答案 2 :(得分:0)

应用np。在两个值都存在的情况下,我将两者结合在一起

import numpy as np
df = pd.DataFrame(data={"col1":["A",np.nan,"B",np.nan,"C"],
                       "col2":[np.nan,"B",np.nan,np.nan,"d"]})
df['col3'] = np.where(df['col1'].isnull(),df['col2'],
                      np.where(df['col2'].isnull(),df['col1'],df['col1']+df['col2']))
    col1    col2    col3
0   A        NaN    A
1   NaN        B    B
2   B        NaN    B
3   NaN      NaN    NaN
4   C          d    Cd

答案 3 :(得分:0)

fillna()replace()是您所需要的,下面是一个完整的示例:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'col1': ["A", "B", "C", np.nan],
    'col2': ["D", "E", np.nan, np.nan]
})

df['col3']= df['col1'].fillna('') + df['col2'].fillna('')
df['col3'] = df['col3'].replace('', np.nan)
print(df)

它将首先用空字符串替换NaN值,然后如果都为空,则将其替换为NaN。

输出:

  col1 col2 col3
0    A    D   AD
1    B    E   BE
2    C  NaN    C
3  NaN  NaN  NaN