Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于多个NaN检查在df中创建新列_Python_Pandas_Dataframe_Null - Fatal编程技术网

Python 基于多个NaN检查在df中创建新列

Python 基于多个NaN检查在df中创建新列,python,pandas,dataframe,null,Python,Pandas,Dataframe,Null,我正在尝试基于多个NaN检查创建派生列 Df 带衍生字段的Df D-如果A、B和C不是空的或NaN,则连接A、B、C中的值 A|B|C|D NaN|23|dfs|"" NaN|NaN|dsdfs|"" 1223|3423|234234|12233423234234 NaN|NaN|NaN|"" 我试过下面的代码 df["D"] = np.where(df["A"].notna() and df[

我正在尝试基于多个NaN检查创建派生列

Df

带衍生字段的Df D-如果A、B和C不是空的或NaN,则连接A、B、C中的值

A|B|C|D
NaN|23|dfs|""
NaN|NaN|dsdfs|""
1223|3423|234234|12233423234234
NaN|NaN|NaN|""
我试过下面的代码

df["D"] = np.where(df["A"].notna() and df["B"].notna() and df["C"].notna(), df["A"].map(str)+df["B"].map(str) + df["C"].map(str), "")
我犯的错误是 级数的真值是模糊的。使用a.empty、a.bool()、a.item()、a.any()或a.all()

感谢您的帮助! 谢谢大家!

你可以试试这个

# df = df.convert_dtypes() uncomment this to convert dtypes of all the columns to suitable data-types. 
(
    df.assign(D=np.where(
        df.isna().any(axis=1),
        "",
        df.astype(str).apply(''.join, axis=1) # or df.astype(str).sum(axis=1)
    )
    )
)

有了您展示的样品,请尝试以下内容。简单的解释是使用
np。where
where检查条件如果列
A、B、C
中的任何一列为空,则保留新列的值为空,否则取3列之和,并将其分配给名为
D
的新列

cols = ['A','B','C']
df['D'] = np.where(df[cols].isnull().any(1),'',df[cols].astype(str).sum(1))

错误来自
。改用
<代码>df[“A”].notna()&df[“B”].notna()&df[“C”].notna()
。(见)谢谢!它解决了我的错误。我可以知道什么时候我应该使用“&”和“and”?@yuzu,你能告诉我这个解决方案是否对你有效吗?
cols = ['A','B','C']
df['D'] = np.where(df[cols].isnull().any(1),'',df[cols].astype(str).sum(1))