在 Pandas 中,我可以自己指定分类类型的级别:
MyCat = pd.CategoricalDtype(categories=['A','B','C'], ordered=True)
my_data = pd.Series(['A','A','B'], dtype=MyCat)
Run Code Online (Sandbox Code Playgroud)
这意味着
有没有办法用 Polar 来做到这一点?我知道您可以使用字符串缓存功能以不同的方式实现 1),但是我很感兴趣是否可以直接指定我的 dtype/levels。我不知道有什么方法可以实现 2),但是我认为 Arrow 中的分类数据类型确实允许可选的排序,所以也许这是可能的?
我有一个数据集,需要对不同列进行分组操作。这是使用极地版本“0.21.1”的最小工作代码
use polars::prelude::*;
use polars_lazy::prelude::*;
use polars::df;
fn main(){
let df = df![
"x1" => ["a", "b", "c", "a"],
"x2" => ["A", "A", "B", "B"],
"y" => [1, 2, 3, 4],
].unwrap();
let lf: LazyFrame = df.lazy();
let out1 = groupby_x1(&lf);
println!("{:?}", out1.collect());
let out2 = groupby_x2(&lf);
println!("{:?}", out2.collect());
}
fn groupby_x1(lf: &LazyFrame) -> LazyFrame {
let lf1: LazyFrame = lf.clone().groupby([col("x1")]).agg([
col("y").sum().alias("y_sum"),
]);
lf1
}
fn groupby_x2(lf: &LazyFrame) -> LazyFrame {
let lf1: LazyFrame = lf.clone().groupby([col("x2")]).agg([
col("y").sum().alias("y_sum"),
]);
lf1
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试将一列空列表添加到 python 中的极坐标数据框中。
我的代码
import polars as pl
a = pl.DataFrame({'a': [1, 2, 3]})
a.with_columns([pl.lit([]).alias('b')])
Run Code Online (Sandbox Code Playgroud)
投掷
Traceback (most recent call last):
File "<input>", line 1, in <module>
a.with_columns([pl.lit([]).alias('b')])
File "/usr/local/lib/python3.10/site-packages/polars/internals/lazy_functions.py", line 767, in lit
return pli.wrap_expr(pylit(item, allow_object))
ValueError: could not convert value '[]' as a Literal
Run Code Online (Sandbox Code Playgroud)
我怎样才能创建这个专栏?
我想将数据polars从mysql数据库读入数据帧。我在用sqlx。
sqlx生成结构向量,例如:Vec<Country>如下:
来自sqlx 文档:
// no traits are needed
struct Country { country: String, count: i64 }
let countries = sqlx::query_as!(Country,
"
SELECT country, COUNT(*) as count
FROM users
GROUP BY country
WHERE organization = ?
",
organization
)
.fetch_all(&pool) // -> Vec<Country>
.await?;
// countries[0].country
// countries[0].count
Run Code Online (Sandbox Code Playgroud)
我如何使用它Vec<Country>来生成极坐标数据框
来自polars 文档:
use polars_core::prelude::*;
let s0 = Series::new("a", &[1i64, 2, 3]);
let s1 = Series::new("b", …Run Code Online (Sandbox Code Playgroud) df1 有['a', 'b', 'c']3 列,我想要一个 df2 有 4 列['a', 'b', 'c', 'd']。d 的计算如下:
if a>5 {
d = b + c
} else if a<-5 {
d = c - b + a
} else {
d = 3.0 * a
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能用生锈的极地做到这一点?也许对于渴望和懒惰的人来说。
在 Rust Polars 中,如何将 aSeries或转换ChunkedArray为 a Vec?
我正在尝试根据两列值过滤 Polars 数据框。在Rust 用户指南中,我只能找到基于一列值的基于谓词的过滤器。
如何在谓词中添加其他列并返回布尔值?
我试图保留 job=“社会工作者”和“性别”=“M”的行(如果需要,可能是附加列)
use polars::{prelude::*, lazy::dsl::col};
// use the predicate to filter
let predicate = (col("job").eq(lit("Social worker")) & (col("sex").eq(lit("M"))));
let filtered_df = df
.clone()
.lazy()
.filter(predicate )
.collect()
.unwrap();
Run Code Online (Sandbox Code Playgroud)
我得到的错误是它说 & 运算符不能在这里使用,并且它不检查这两个条件。
error[E0369]: no implementation for \Expr & Expr``
|
23 | let predicate = col("job").eq(lit("Social worker")) & col("sex").eq(lit("M"));
| ----------------------------------- ^ ----------------------- Expr
| |
| Expr
Run Code Online (Sandbox Code Playgroud)
如果我只使用一种条件,过滤器将按要求工作。以下代码返回正确的输出。
// use the predicate to filter
let predicate = col("job").eq(lit("Social worker"));
let filtered_df = …Run Code Online (Sandbox Code Playgroud) 我可以读取文件中没有列标题的 csv 文件。通过以下代码在 Rust 中使用极坐标:
use polars::prelude::*;
fn read_wine_data() -> Result<DataFrame> {
let file = "datastore/wine.data";
CsvReader::from_path(file)?
.has_header(false)
.finish()
}
fn main() {
let df = read_wine_data();
match df {
Ok(content) => println!("{:?}", content.head(Some(10))),
Err(error) => panic!("Problem reading file: {:?}", error)
}
}
Run Code Online (Sandbox Code Playgroud)
但现在我想在读取时或读取后将列名添加到数据框中,如何添加列名。这是一个列名称向量:
let COLUMN_NAMES = vec![
"Class label", "Alcohol",
"Malic acid", "Ash",
"Alcalinity of ash", "Magnesium",
"Total phenols", "Flavanoids",
"Nonflavanoid phenols",
"Proanthocyanins",
"Color intensity", "Hue",
"OD280/OD315 of diluted wines",
"Proline"
];
Run Code Online (Sandbox Code Playgroud)
如何将这些名称添加到数据框中。可以通过以下代码下载数据:
wget https://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data
Run Code Online (Sandbox Code Playgroud) 你好,有一个数据框,其中有一个名为标签的列,它是一个 json 字符串。
我想在标签列上过滤此数据框,以便它仅包含存在特定标签键或标签具有特定值的行。
我想我可以做一个字符串包含匹配,但认为首先将 json 转换为字典并使用 has_key 等可能会更强大?
在 python Polars 中推荐的方法是什么?
谢谢
我想使用 Pola-rs 阅读来自 Rigol MSO5000 示波器的以下(在我看来相当糟糕的)CSV:
D7-D0,D15-D8,t0 = -25.01s, tInc = 2e-06,
+2.470000E+02,2.000000E+00,,
+1.590000E+02,1.600000E+01,,
+2.400000E+02,2.000000E+00,,
+2.470000E+02,+1.300000E+02,,
+1.590000E+02,1.800000E+01,,
+2.470000E+02,+1.300000E+02,,
9.500000E+01,1.800000E+01,,
9.500000E+01,1.800000E+01,,
+2.400000E+02,0.000000E+00,,
(...)
Run Code Online (Sandbox Code Playgroud)
这是我当前的 Jupyter Notebook 迭代/尝试,然后发现Pola-rs 不鼓励使用索引进行选择:
D7-D0,D15-D8,t0 = -25.01s, tInc = 2e-06,
+2.470000E+02,2.000000E+00,,
+1.590000E+02,1.600000E+01,,
+2.400000E+02,2.000000E+00,,
+2.470000E+02,+1.300000E+02,,
+1.590000E+02,1.800000E+01,,
+2.470000E+02,+1.300000E+02,,
9.500000E+01,1.800000E+01,,
9.500000E+01,1.800000E+01,,
+2.400000E+02,0.000000E+00,,
(...)
Run Code Online (Sandbox Code Playgroud)
当我在 Polars Discord 上被告知这个问题可能无法通过数据帧库得到最佳解决时,这是我的低级 CSV 解析 Rust 伪代码方法:
import polars as pl
df = pl.read_csv("normal0.csv")
# Grab initial condition and increments
t0 = df.columns[2]; assert "t0" in t0; t0 = float(t0.split('=')[1].replace('s', '').strip())
tinc = …Run Code Online (Sandbox Code Playgroud) rust-polars ×10
rust ×6
dataframe ×2
csv ×1
oscilloscope ×1
python ×1
python-3.x ×1
rust-sqlx ×1
sql ×1