2024-04-26 18:34:38 发布
网友
我的数据框中有两列。在任何一个实例(行)中,至少有一列包含字符串值,另一列中可能包含NoneType或其他字符串
我想创建第三列,在其中一列为非类型的情况下,它将接受字符串的值。在两者都是字符串的情况下,将采用两者的串联
我该怎么做
column1 column2 column3 0 hello None hello 1 None goodbye goodbye 2 hello goodbye hello, goodbye
使用na_rep='',这样带缺失值的联接不会导致整行的NaN。然后strip由于缺少数据而连接的任何多余分隔符(假设分隔符字符也不会开始或结束任何单词)
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。我们在删除空值后合并所有值:
lambda
df['column3'] = df.apply(lambda row: ', '.join(row.dropna()), axis=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
Series.str.cat
使用
na_rep=''
,这样带缺失值的联接不会导致整行的NaN
。然后strip
由于缺少数据而连接的任何多余分隔符(假设分隔符字符也不会开始或结束任何单词)有很多列,中间可能有缺失数据的条带,上面的方法不能去除多余的分隔符。相反,您可以沿行使用慢速
lambda
。我们在删除空值后合并所有值:解决方案
您可以用空字符串替换所有的
NaN
,然后连接列(A和B)以创建列C输出:
虚拟数据
输出:
相关问题 更多 >
编程相关推荐