Pandas read_csv():如果与模式不匹配则删除行

问题描述 投票:0回答:1

我有一个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')
python pandas csv dataframe data-cleaning
1个回答
1
投票

可能是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)
© www.soinside.com 2019 - 2024. All rights reserved.