44 lines
1.1 KiB
TypeScript
44 lines
1.1 KiB
TypeScript
import pl, { DataFrame, Series } from 'nodejs-polars'
|
|
import fs from 'fs'
|
|
|
|
export interface CSVDatabase {
|
|
df: DataFrame
|
|
filepath: string
|
|
}
|
|
|
|
export function create_csv_database(filepath: string, initialData: any): CSVDatabase {
|
|
let df = DataFrame(initialData)
|
|
df.writeCSV(filepath)
|
|
return { df, filepath }
|
|
}
|
|
|
|
export function save_db(db: CSVDatabase) {
|
|
db.df.writeCSV(db.filepath)
|
|
}
|
|
|
|
export function add_row(db: CSVDatabase, row: any) {
|
|
let d = DataFrame(row)
|
|
db.df = db.df.vstack(d)
|
|
}
|
|
|
|
export function print_head(db: CSVDatabase) {
|
|
console.log(db.df.head())
|
|
}
|
|
|
|
export function delete_row_by_key(db: CSVDatabase, key: string, keyColumn: string) {
|
|
db.df = db.df.filter(pl.col(keyColumn).neq(pl.lit(key)))
|
|
}
|
|
|
|
export function select_columns(db: CSVDatabase, columns: string[]): DataFrame {
|
|
return db.df.select(...columns)
|
|
}
|
|
|
|
export function join_dataframes(db1: CSVDatabase, db2: CSVDatabase, on: string): DataFrame {
|
|
return db1.df.join(db2.df, { on, how: "inner" })
|
|
}
|
|
|
|
export function add_simple_index(db: CSVDatabase) {
|
|
const indices = Array.from(Array(db.df.height).keys()) // Create 0-N index
|
|
db.df = db.df.withColumn(pl.Series("index", indices))
|
|
}
|