Python 如何在不循环数据帧的情况下替换数据帧上每个单元格的值

Python 如何在不循环数据帧的情况下替换数据帧上每个单元格的值,python,pandas,dataframe,Python,Pandas,Dataframe,如果我有一个字符串,如何对数据帧的每个单元格应用此条件检查?如果找到了字符串,如何以更简单的方式将其替换为0 for col in data.columns: for day in data.index: if (type(data_input_df.loc[day, col]) == 'str'): data_input_df[col][day] = 0 数据帧是: Log 123

如果我有一个字符串,如何对数据帧的每个单元格应用此条件检查?如果找到了字符串,如何以更简单的方式将其替换为0

for col in data.columns:
    for day in data.index:
        if (type(data_input_df.loc[day, col]) == 'str'):
            data_input_df[col][day] = 0
数据帧是:

                           Log      1233.de ...      asdad.w.1    fff.op
Tagname                                     ...                        
01/06/2008 00:00            ON      343.04  ...        73.75      79.03
02/06/2008 00:00            ON      332.31  ...        73.71      79.21
03/06/2008 00:00            ON      339.25  ...        75.77      80.11
04/06/2008 00:00            ON      353.25  ...        76.47      79.75
05/06/2008 00:00            ON      353.44  ...        77.35      82.48
上载为:

dat =  pd.read_csv('data.csv', header = 0, index_col = "Tagname")
data = pd.DataFrame(data)

首先选择由对象填充的所有列,因为读取csv中的数据都是对象字符串,请创建字典并在中设置0:

如果所有列的数据类型都是对象,因为后面的行中出现了一些字符串,该怎么办

然后,如果不缺少值,则用于将所有列转换为数字,如果不缺少值,则错误为“强制”,最后仅将所有缺少的值替换为0:

如果可能缺少值且无需更改,则不可能使用fillna,因为已替换所有NAN,因此使用新的NAN与链式测试原始数据一起使用:

df = df.apply(pd.to_numeric, errors='coerce').mask(lambda x: x.isna() & df.notna(), 0)

首先选择由对象填充的所有列,因为读取csv中的数据都是对象字符串,请创建字典并在中设置0:

如果所有列的数据类型都是对象,因为后面的行中出现了一些字符串,该怎么办

然后,如果不缺少值,则用于将所有列转换为数字,如果不缺少值,则错误为“强制”,最后仅将所有缺少的值替换为0:

如果可能缺少值且无需更改,则不可能使用fillna,因为已替换所有NAN,因此使用新的NAN与链式测试原始数据一起使用:

df = df.apply(pd.to_numeric, errors='coerce').mask(lambda x: x.isna() & df.notna(), 0)

您可以将dataframe强制为数字数据类型,然后用零填充NaN

df = pd.to_numeric(df, errors='coerce').fillna(0)

您可以将dataframe强制为数字数据类型,然后用零填充NaN

df = pd.to_numeric(df, errors='coerce').fillna(0)

这不是最初问题的一部分,而是出于好奇;如果所有列的数据类型都是对象,因为后面的行中出现了一些字符串,该怎么办;如果所有列的数据类型都是对象,因为后面的行中出现了一些字符串,该怎么办?