我有一个超过 1000 列的大型数据集,数据集很乱,混合了 dtypes。有 2 个 int64 列、119 个浮点列和 1266 个对象列。
我想开始数据清理,但意识到有几个问题。由于列太多,目视检查数据以定位错误过于繁琐。数据集示例如下
Company ID Year Date Actual Loan Loss Depreciation Accounts Payable
001 2001 19 Oct 2001 100000.00 40000 $$ER: 4540,NO DATA VALUES FOUND
002 2002 18 Sept 2001 NaN $$ER: E100,NO WORLDSCOPE DATA FOR THIS CODE
003 2004 01 Aug 2000 145000.00 5000 Finance Dept
我想在删除空行之前删除所有错误变量。错误变量通常以“$$ER:”开头
我试过以下
#load the dataset
df = pd.read_excel("path/file1.xlsx", sheet_name = "DATA_TS")
#examine the data
df.head(20)
#check number of rows, cols and dtypes
df.info()
#create a function to replace the error values
def convert_datatypes(val):
new_val = val.replace('$$ER: 4540,NO DATA VALUES FOUND','').replace('$$ER: E100,NO WORLDSCOPE DATA FOR THIS CODE', '')
return new_val
df.apply(convert_datatypes)
该代码有效,但我再次检查并意识到还有其他错误值,例如
"$$ER: E100,INVALID CODE OR EXPRESSION ENTERED".
我很确定还有其他错误值,想知道是否有任何其他方法可以有效地删除错误值并同时将列的 dtype 更改为所谓正确的 dtype(即,从对象为 int 或 str)?
感谢任何形式的帮助,在此先感谢您!
最佳答案
这将解决问题:
for col in df.columns[df.dtypes=='object']:
df.loc[df[col].str.startswith('$$ER',na=False),col]=''
您也可以使用
contains()
但您必须指定 regex=False
for col in df.columns[df.dtypes=='object']:
df.loc[df[col].str.contains('$$ER',na=False,regex=False),col]=''
关于python - 如何删除具有 1000 列的大型 df 中的错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58655386/