繁体   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