我正在尝试合并包含字符串和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
答案 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