use crate::ColumnArray;
use crate::DataFrame;
pub fn generate_info_report(df: &DataFrame) -> DataFrame {
let original_headers = df.headers();
let headers = vec![
"column".to_string(),
"mean".to_string(),
"sum".to_string(),
"min".to_string(),
"max".to_string(),
"null_count".to_string(),
"dtype".to_string(),
];
let mut column_names: Vec<Option<String>> = Vec::new();
let mut mean_col: Vec<Option<f64>> = Vec::new();
let mut sum_col: Vec<Option<f64>> = Vec::new();
let mut min_col: Vec<Option<f64>> = Vec::new();
let mut max_col: Vec<Option<f64>> = Vec::new();
let mut null_count_col: Vec<usize> = Vec::new();
let mut dtype_col: Vec<String> = Vec::new();
for (col_idx, header) in original_headers.iter().enumerate() {
if let Some(column) = df.get_column(col_idx) {
column_names.push(Some(header.clone())); mean_col.push(column.mean()); sum_col.push(column.sum());
min_col.push(column.min());
max_col.push(column.max());
null_count_col.push(column.null_count());
dtype_col.push(format!("{:?}", column.dtype()));
}
}
let columns: Vec<Box<dyn ColumnArray>> = vec![
column_names.into(), mean_col.into(), sum_col.into(), min_col.into(), max_col.into(), null_count_col.into(), dtype_col.into(),
];
DataFrame::new(Some(headers), columns).unwrap()
}
pub fn generate_na_report(df: &DataFrame) -> DataFrame {
let original_headers = df.headers();
let mut column_names: Vec<Option<String>> = Vec::new();
let headers = vec!["column".to_string(), "null_count".to_string()];
let mut null_count_col: Vec<usize> = Vec::new();
for (col_idx, header) in original_headers.iter().enumerate() {
if let Some(column) = df.get_column(col_idx) {
column_names.push(Some(header.clone())); null_count_col.push(column.null_count());
}
}
let columns: Vec<Box<dyn ColumnArray>> = vec![
column_names.into(), null_count_col.into(), ];
DataFrame::new(Some(headers), columns).unwrap()
}