Pandas read_csv (): удалить строку, если не соответствует схеме - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть 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) 

С Пандами я не могу найти простой способ сделать это.Например, я думал, что этот фрагмент поможет, но вместо этого он просто копирует неправильное значение, а не отбрасывает его.

dataFrame['col1'] = dataFrame['col1'].astype(np.int64, errors='ignore')

1 Ответ

0 голосов
/ 16 февраля 2019

Может быть 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)
...