簡體   English   中英

熊貓read_csv():如果不匹配架構則刪除行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM