Rust学以致用(一)——读取k线csv文件,生成dataframe后计算MA5指标

本文介绍如何使用Rust语言和Polars库进行CSV文件的数据读取、处理和保存。主要内容包括:利用Polars操作DataFrame,计算移动平均线MA5,并将结果保存回CSV文件。

一、业务内容

  • 读入csv文件到dataframe里
  • 生成新的列【“MA5"】
  • 计算MA5指标
  • 把dataframe重新保存成csv文件

二、涉及的rust知识

  • ploars包(用于dataframe的处理)的简单使用
  • dataframe增加列的操作
  • dataframe的打印
  • 自定义函数
  • 闭包的使用
  • 读取csv到df中
  • 把df保存到csv中
  • map的使用
  • series的切片
  • 条件表达式的使用

三、具体实现

1、待处理的csv文件——某只k线文件

在这里插入图片描述

2、包的引用

主要用到的是polars,这个包等同于python中的pandas以及julia中的dataframes。
参观和学习的地址:
官网地址:https://docs.rs/polars/latest/polars/
仓库地址:https://github.com/pola-rs/polars

extern crate polars; 
use polars::prelude::*;
use std::fs::File;

3、生成一个dataframe

DataFrame::default()

let mut df = DataFrame::default();

4、df里面增加一列

df.with_column()

df.with_column(Series::new("榜号",vec![1,2,3]));
df.with_column(Series::new("姓名",vec!["张三丰","黄老邪","老顽童"]));

5、 生成一个series

Series::new()

let mySeries = Series::new("姓名",vec!["张三丰","黄老邪","老顽童"]);

6、读取csv到df 中

CsvReader::new()

/// 功能:读取csv文件,转成dataframe
/// 输入:filePath:String ,文件路径和名字
/// 输出:Result<DataFrame> 
/// 
///  # Examples
/// ```
/// use polars::prelude::*;
/// use std::fs::File;
/// let df = read_csv("D:/csvTest/000004.csv".to_string());
/// println!("{:?}", df);
/// ```
/// 
fn read_csv(filePath: String) -> Result<DataFrame> 
{
   
   
    let file = File::open(filePath).expect("找不到文件");
    CsvReader::new(file)
        .infer_schema(None)
        .has_header(true)
        .finish()
}

测试代码:

use polars::prelude::*;
use std::fs::File;
let df = read_csv("D:/csvTest/000004.csv".to_string());
println!("{:?}", df);

7、把df保存成csv文件

write_csv::new()

/// 【功能】把dataframe保存成csv
/// 输入:
/// df: &mut DataFrame
/// filePath:String
/// 输出:Result<()>
/// 
///  # Examples
/// ```
/// extern crate polars; 
/// use polars::prelude::*;
/// let mut df = DataFrame::default();
/// df.with_column(Series::new("榜号",vec![1,2,3]));
/// df.with_column(Series::new("姓名",vec!["张三丰","黄老邪","老顽童"]));
/// write_csv(& mut df,"e:/bbb.csv".to_string());
/// ```
/// 
fn write_csv(df: &mut DataFrame,filePath:String) -> Result<()> {
   
   
    let mut file = File::create(filePath).expect("创建文件失败");

    CsvWriter::new(&mut file)
    .has_header(true)    //.has_headers(true)
    .with_delimiter(b',')
    .finish(df)
}

测试代码:

extern crate polars; 
use polars::prelude::*;
let mut df = DataFrame::default();
df.with_column(Series::new("榜号",vec![1,2,3]));
df.with_column(Series::new("姓名",vec!["张三丰","黄老邪","老顽童"]));
write_csv(&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值