如何以一种更简单的方式将此条件应用于数据框的每个单元格(检查是否有字符串,如果找到,则替换为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)
首先选择所有由对象填充的列,这是因为来自read_csv
的数据都是对象strings
,创建字典并0
在其中设置DataFrame.assign
:
d = dict.fromkeys(df.select_dtypes(object).columns, 0)
df = df.assign(**d)
print (df)
Log 1233.de asdad.w.1 fff.op
Tagname
01/06/2008 00:00 0 343.04 73.75 79.03
02/06/2008 00:00 0 332.31 73.71 79.21
03/06/2008 00:00 0 339.25 75.77 80.11
04/06/2008 00:00 0 353.25 76.47 79.75
05/06/2008 00:00 0 353.44 77.35 82.48
如果所有列的dtypes都是对象,因为后来的行中出现了一些字符串,该怎么办?
然后,如果没有缺失值,则to_numeric
用于将所有列转换为数字,errors='coerce'
如果没有数字,则用于缺失值,最后仅将所有缺失值替换为0
:
df = df.apply(pd.to_numeric, errors='coerce').fillna(0)
如果可能缺少值并且不必更改它们,则将无法使用fillna
(因为已替换所有NaN),因此将其DataFrame.mask
与链式测试原始数据一起使用新值:
df = df.apply(pd.to_numeric, errors='coerce').mask(lambda x: x.isna() & df.notna(), 0)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句