[英]Pandas read_csv(): drop row if doesn't match a schema
我有一個csv文件,需要將其讀取並解析為Pandas數據框。 從理論上講,所有列均應遵循已知的數字數據和字符串模式。 我知道某些記錄已損壞,字段數較少或順序錯誤。
我想做的是擺脫所有這些有問題的行。
作為參考,在PySpark上,我曾經使用'DROPMALFORMED'
篩選出與模式不匹配的記錄。
dataSchema = StructType([
StructField("col1", LongType(), True),
StructField("col2", StringType(), True)])
dataFrame = sqlContext.read \
.format('com.databricks.spark.csv') \
.options(header='false', delimiter='\t', mode='DROPMALFORMED') \
.load(filename, schema = dataSchema)
對於Pandas,我找不到簡單的方法。 例如,我認為此代碼片段可以解決問題,但它只是復制回錯誤的值,而不是刪除它。
dataFrame['col1'] = dataFrame['col1'].astype(np.int64, errors='ignore')
可能是pandas.to_numeric
會有所幫助。 它具有errors='coerce'
選項,該選項將所有錯誤的值替換為NaN
。 然后,您可以使用dropna()
函數刪除包含NaN
行:
import pandas as pd
df=pd.DataFrame([[1,2,3],[4,5,6],[7,'F',8]],columns=['col1','col2','col3'])
df['col2']=pd.to_numeric(df['col2'],errors='coerce')
df.dropna(inplace=True)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.