我正在尝试通过 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 中没有选项可以忽略列存在检查。您可以采取的解决方法是将代码包装在 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)