python - 基于唯一值将数据帧子集为小数据帧并同时写入 csv 文件的有效方法
问题描述
df
根据唯一/过滤条件将大型数据帧子集化为小子集的最有效方法是什么?例如,我有一个维度为 22050 行 5 列的数据集,如下所示
id, nationality, age, gender, income
10001, France, 20, M, 45007
13328, UK, 52, F, 72308
11654, USA, 57, F, 95645
11765, UK, 39, M, 77343
10081, UAE, 41,M, 83117
10503, France, 22, F, 25665
csv
整个数据集中有 15 个不同的国籍,我想根据 15 个不同的国家将数据集分成 15 个数据框,同时在 15 个输出文件中写出 15 个数据框。
所需的输出应如下所示
csv
文件中的数据框一
id, nationality, age, gender, income
10001, France, 20, M, 45007
10503, France, 22, F, 25665
csv
文件中的数据框二
13328, UK, 52, F, 72308
11765, UK, 39, M, 77343
同样适用于数据帧 3 到 15
这是我的尝试:
fran = df[df.nationality == 'France']
fran.to_csv(file_name, sep=',')
uk = df[df.nationality =='UK']
uk.to_csv(file_name, sep=',')
USA = df[df.nationality == 'USA']
usa.to_csv(file_name, sep=',')
我想要一种更有效的方式,apply | lambda
或者一种loop
方法
解决方案
在base R
中,我们可以按“国籍”列将数据拆分list
为data.frame
lst1 <- split(df, df$nationality)
然后循环list
并将其写入不同的文件
lapply(names(lst1), function(nm) write.csv(lst[[nm]],
paste0(nm, ".csv"), row.names = FALSE, quote = FALSE))
注意:该方法比基于子集的split
方法要快得多==
推荐阅读
- python - 为什么 IBM 自然语言分类器返回 DecodeError。Python
- c++ - 使用 std::make_unique<> 赋值
- c++ - 在 C++ 中使用重载时,如何将重载函数放在 lhs 中?
- android - 如果已安装,如何从我的网站链接到我的应用程序
- c# - 使用c#异步调用EF中的存储过程
- c# - 子控制器中是否有办法隐藏基本通用控制器的操作?
- ffmpeg - avio_alloc_context()的回调函数什么时候触发为ffmpeg官方文档?
- php - 如何避免使用 PHP 生成器对 MYSQL 数据进行嵌套 foreach 以提高性能?
- javascript - 未捕获(承诺中)DOMException:在 setParameters() 中修改了只读字段
- linux - 当两个项目都存在时分别处理案例(grepping ifconfig 输出)