dataframe - Julia:将函数应用于 DataFrame 中的每个单元格(不丢失列名)
问题描述
我正在潜入 Julia,因此是我的“新手”问题。
来自 R 和 Python,我习惯于将简单的函数(算术或其他)分别应用于整个pandas.DataFrame
s 和data.frame
s。
#both R and Python
df - 1 # returns all values -1, given all values are numeric
df == "someString" # returns a boolean df
稍微复杂一点
#python
df = df.applymap(lambda v: v - 1 if v > 1 else v)
#R
df[] <- lapply(df, function(x) ifelse(x>1,x-1,x))
问题是,我不知道如何在 Julia 中做到这一点,我在网上找不到类似的解决方案。Stackoverflow 在使用 Google 时有很大帮助。所以就在这里。我如何在 Julia 中做到这一点?
谢谢你的帮助!
PS:
到目前为止,我已经提出了以下解决方案,其中我丢失了列名。
DataFrame(colwise(x -> x .-1, df))
# seems like to much code for only subtracting 1 and loosing col names
解决方案
请将您的 DataFrames.jl 安装更新到版本 0.19.0。
您可以像这样使用广播做所有您想做的事情:
julia> df = DataFrame(rand(2,3))
2×3 DataFrame
│ Row │ x1 │ x2 │ x3 │
│ │ Float64 │ Float64 │ Float64 │
├─────┼──────────┼──────────┼──────────┤
│ 1 │ 0.666871 │ 0.206249 │ 0.729896 │
│ 2 │ 0.547018 │ 0.467758 │ 0.810292 │
julia> df .+ 1
2×3 DataFrame
│ Row │ x1 │ x2 │ x3 │
│ │ Float64 │ Float64 │ Float64 │
├─────┼─────────┼─────────┼─────────┤
│ 1 │ 1.66687 │ 1.20625 │ 1.7299 │
│ 2 │ 1.54702 │ 1.46776 │ 1.81029 │
julia> df .< 0.5
2×3 DataFrame
│ Row │ x1 │ x2 │ x3 │
│ │ Bool │ Bool │ Bool │
├─────┼──────┼──────┼──────┤
│ 1 │ 0 │ 1 │ 0 │
│ 2 │ 0 │ 1 │ 0 │
(输出来自 Julia 1.3,但在早期版本中,唯一的区别是在打印输出Bool
中将显示为true
/ )false
这是你想要的吗?
推荐阅读
- mysql - 获取 mysql.connector.errors.ProgrammingError: 1045 (28000): Access denied for user 'vsearch'@'localhost' (using password: YES) with python
- javascript - JS数组合并求和
- javascript - 有没有一种方便的方法来引用 Svelte 组件中的 DOM 元素?
- javascript - 如何显示用户选择上传的图像
- java - Java 中循环技巧的 Helloworld 示例
- c++ - 从 txt 文件中删除注释
- ios - 如何在 UITableView 中执行网络调用
- spring - 如何使用 Spring Boot 资源服务器拥有未经身份验证的端点
- python - 如何在 Python 中读取和写入 config.ini 文件?
- java - 使用 java 和 jsoup从网站上的标签中提取 src 值