我是 python 新手,来自 R 环境,我喜欢 R 的一件事是能够编写代码,在一个可读的代码块中对数据进行多种转换
但是对我来说在 python 中找到这种风格的代码是不是很困难,我想知道你们中的一些人是否有同样的问题可以教我并指导在哪里可以找到有关该特定风格及其功能的资源和参考资料允许。
例如我想转换R的这段代码:
library(dplyr)
iris %>%
select(-Petal.Width) %>% #drops column Ptela.Width
filter(Petal.Length > 2 | Sepal.Width > 3.1) %>% #Selects only rows where Criteria is met
filter(Species %in% c('setosa', 'virginica')) %>% #Filters in Species selected
mutate_if(is.numeric, scale) %>% #Numerical columns are scale into z-scores
mutate(item = rep(1:3, length.out = n())) %>% # a new col item is created and will carry the sequence 1,2,3 until the end of the dataste
group_by(Species) %>% #groups by species
summarise(n = n(), #summarises the size of each group
n_sepal_over_1z = sum(Sepal.Width > 1), #counts the number of obs where Spepal.Width is over 1 z score
nunique_item_petal_over_2z = n_distinct(item[Petal.Length>1]))
#counst the unique elements in the col item where the values of the col Petal.length is over 1 z-score
那一小段代码能够做我想做的一切,但如果我想用 python 编写它,我似乎找不到一种方法来复制这种编码风格,而我得到的最接近的是:
import pandas as pd
from sklearn.preprocessing import StandardScaler
# Load the Iris dataset
iris = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data",
header=None, names=["Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width", "Species"])
# Filter and manipulate the data
filtered_data = iris[(iris["Petal.Length"] > 2) | (iris["Sepal.Width"] > 3.1)]
filtered_data = filtered_data[filtered_data["Species"].isin(["setosa", "virginica"])]
# Scale numeric columns using StandardScaler
numeric_columns = filtered_data.select_dtypes(include=[float])
scaler = StandardScaler()
scaled_data = pd.DataFrame(scaler.fit_transform(numeric_columns), columns=numeric_columns.columns)
# Add the "item" column
scaled_data["item"] = list(range(1, 4)) * (len(scaled_data) // 3)
# Group by "Species" and calculate summary statistics
summary_stats = scaled_data.groupby("Species").agg(
n=pd.NamedAgg(column="Sepal.Length", aggfunc="size"),
n_sepal_over_1z=pd.NamedAgg(column="Sepal.Width", aggfunc=lambda x: (x > 1).sum()),
nunique_item_petal_over_2z=pd.NamedAgg(column="item", aggfunc=lambda x: x[scaled_data["Petal.Length"] > 1].nunique())
).reset_index()
print(summary_stats)
正如你所看到的,有更多的代码,如果你能教我如何用 python 中的一小块代码用尽可能少的代码实现我的转换,我将非常感激,我是新手,所以我的意图不是比较这两种编程语言,它们本身都很棒,但我只是想看到 python 在链接或管道风格上与 R 一样灵活和多样化,如果你们不知道如何编写这样的代码,但知道一些资源或博客,这样做链接风格请在评论中发布,非常感谢
不确定将 R 中使用的库移植到 Python 是否真的受益,但有一些选择。
https://www.r-bloggers.com/2022/05/ Three-packages-that-port-the-tidyverse-to-python/
对于那些喜欢 data.table 的人来说,也有一些选项:
https://datatable.readthedocs.io/en/latest/index.html https://datatable.readthedocs.io/en/latest/manual/comparison_with_rdatatable.html