我有一个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')
答案 0 :(得分: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)