我的数据框中有2列。在任何一个实例(行)上,至少其中一列具有字符串值,另一列可能具有NoneType或另一字符串。
我想创建一个第三列,如果其中一列是NoneType,它将采用字符串的值。并且在两个都是字符串的情况下,将两者串联起来。
我该怎么做?
column1 column2 column3
0 hello None hello
1 None goodbye goodbye
2 hello goodbye hello, goodbye
答案 0 :(得分:4)
使用na_rep=''
,因此缺少值的联接不会导致整个行的NaN
。然后strip
由于缺少数据而加入的任何多余的分隔符(假设分隔符也不会以您的任何单词开头或结尾)。
import pandas as pd
df = pd.DataFrame({'column1': ['hello', None, 'hello'],
'column2': [None, 'goodbye', 'goodbye']})
sep = ', '
df['column3'] = (df['column1'].str.cat(df['column2'], sep=sep, na_rep='')
.str.strip(sep))
print(df)
column1 column2 column3
0 hello None hello
1 None goodbye goodbye
2 hello goodbye hello, goodbye
在许多列中,中间可能会有丢失数据的条纹,因此上述操作无法删除多余的分隔符。相反,您可以在行中使用慢速lambda
。删除空值后,我们将所有值连接起来:
df['column3'] = df.apply(lambda row: ', '.join(row.dropna()), axis=1)
答案 1 :(得分:-1)
您可以将所有NaN
替换为空字符串,然后对列(A和B)进行创建以创建列C。
df2 = df.fillna('')
df['C'] = df2.A.str.strip() + df2.B.str.strip(); #del df2;
print(df)
输出:
A B C=A+B
0 1 3 13
1 2 None 2
2 dog dog dogdog
3 None None
4 snake 20 snake20
5 cat None cat
d = {
'A': ['1', '2', 'dog', None, 'snake', 'cat'],
'B': ['3', None, 'dog', None, '20', None]
}
df = pd.DataFrame(d)
print(df)
输出:
A B
0 1 3
1 2 None
2 dog dog
3 None None
4 snake 20
5 cat None