如何能够忽略 pandas 读取镶木地板功能中不存在的列

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

我正在尝试通过 pandas 读取镶木地板文件。其中一些文件中不存在几列。 我想知道忽略读取镶木地板功能中的 cloumn 存在检查。

` def column_data(self): """删除所有唯一值,这样就不会少于2个值 返回: list返回列表列数据 ”“” self._df_list_data = access_data.read_data(self.platform_id, self.equipment_id, self.date_range_df[0].date()) # 获取数据列表

    column_data = []
    for col in self._df_list_data.columns: #get the list of columns
        if len(self._df_list_data.loc[:, col].unique()) <= 5: #check if column used more than double 
            self._df_list_data.drop(col, axis=1, inplace=True)
        column_data = list(self._df_list_data.columns.values)   
    return column_data`

我读取镶木地板文件的所有列,然后将其存储在列表数据中。

if columns is None: data_list = pd.read_parquet(io.BytesIO(blob_data.readall()),engine='fastparquet') #run with default column list else: data_list = pd.read_parquet(io.BytesIO(blob_data.readall()),columns=columns,engine='fastparquet') #run without default coloumn list return data_list
第一个条件是获取数据然后在column_data()中调用列存储 第二个条件是根据日期调用 parquest 文件,但很少有日期某些列不存在。 因此,系统无法匹配列数据。 如何忽略 pandas read parqeute 函数中列的存在?

pandas dataframe parquet fastparquet
1个回答
0
投票

据我所知,Pandas 中没有选项可以忽略列存在检查。您可以采取的解决方法是将代码包装在 try-catch 块中,并处理其中缺少的列错误。一种选择是指定可以放入缺失列中的默认值:

import pandas as pd
import io

default_values = {
    # Replace 'column1' and 'column2' with the actual column name
    'column1': 0,  
    'column2': 'N/A'
}

try:
    data_list = pd.read_parquet(io.BytesIO(blob_data.readall()), engine='fastparquet')
except ValueError as e:
    print(f"Error reading Parquet file: {e}")

    for column, default_value in default_values.items():
        if column not in data_list.columns:
            data_list[column] = default_value

您也可以删除导致问题的列:

try:
    data_list = pd.read_parquet(io.BytesIO(blob_data.readall()), columns=columns, engine='fastparquet')
except ValueError as e:
    print(f"Error reading Parquet file: {e}")

    for column in columns:
        if column not in data_list.columns:
            print(f"Removing column: {column}")
            data_list.drop(column, axis=1, inplace=True)
© www.soinside.com 2019 - 2024. All rights reserved.