Compare commits

..

5 Commits

2 changed files with 36 additions and 10 deletions

View File

@ -252,9 +252,28 @@ impl DataFrame {
old_name old_name
) )
}); });
self.data.insert(new_name.clone(), column); let new_name_clone = new_name.clone();
self.data.insert(new_name, column);
if let Some(pos) = self.column_names.iter().position(|n| n == old_name) { if let Some(pos) = self.column_names.iter().position(|n| n == old_name) {
self.column_names[pos] = new_name; self.column_names[pos] = new_name_clone.clone();
}
// rename the column in the underlying Frame as well
if let Some(col) = self.data.get_mut(&new_name_clone) {
match col {
DataFrameColumn::F64(frame) => {
frame.rename(old_name, new_name_clone.clone());
}
DataFrameColumn::I64(frame) => {
frame.rename(old_name, new_name_clone.clone());
}
DataFrameColumn::String(frame) => {
frame.rename(old_name, new_name_clone.clone());
}
DataFrameColumn::Bool(frame) => {
frame.rename(old_name, new_name_clone.clone());
}
}
} }
} }

View File

@ -232,10 +232,17 @@ impl<T: Clone + PartialEq> Frame<T> {
} }
(RowIndex::Date(vals), RowIndexLookup::Date(lookup)) (RowIndex::Date(vals), RowIndexLookup::Date(lookup))
} }
Some(RowIndex::Range(_)) => { Some(RowIndex::Range(ref r)) => {
panic!( // If the length of the range does not match the number of rows, panic.
"Frame::new: Cannot explicitly provide a Range index. Use None for default range." if r.end.saturating_sub(r.start) != num_rows {
); panic!(
"Frame::new: Range index length ({}) mismatch matrix rows ({})",
r.end.saturating_sub(r.start),
num_rows
);
}
// return the range as is.
(RowIndex::Range(r.clone()), RowIndexLookup::None)
} }
None => { None => {
// Default to a sequential range index. // Default to a sequential range index.
@ -1129,10 +1136,10 @@ mod tests {
Frame::new(matrix, vec!["X", "Y"], Some(index)); Frame::new(matrix, vec!["X", "Y"], Some(index));
} }
#[test] #[test]
#[should_panic(expected = "Cannot explicitly provide a Range index")] #[should_panic(expected = "Frame::new: Range index length (4) mismatch matrix rows (3)")]
fn frame_new_panic_explicit_range() { fn frame_new_panic_invalid_explicit_range_index() {
let matrix = create_test_matrix_f64(); let matrix = create_test_matrix_f64(); // 3 rows
let index = RowIndex::Range(0..3); // User cannot provide Range directly let index = RowIndex::Range(0..4); // Range 0..4 but only 3 rows
Frame::new(matrix, vec!["A", "B"], Some(index)); Frame::new(matrix, vec!["A", "B"], Some(index));
} }