我刚开始学习Julia,我想在我的目录中阅读许多csv文件.我怎样才能做到这一点?
我的目录包含以下文件,我想读取trip_data_1到trip_data_12的所有文件.
"trip_data_1.csv""trip_data_10.csv""trip_data_11.csv""trip_data_12.csv""trip_data_2.csv""trip_data_3.csv""trip_data_4.csv""trip_data_5.csv""trip_data_6.csv""trip_data_7.csv" "trip_data_8.csv""trip_data_9.csv""trip_fare_1.csv""trip_fare_10.csv""trip_fare_11.csv""trip_fare_12.csv""trip_fare_2.csv""trip_fare_3.csv""trip_fare_4.csv""trip_fare_5.csv" "trip_fare_6.csv""trip_fare_7.csv""trip_fare_8.csv""trip_fare_9.csv"
这是我尝试过的:
using DataFrames
df = readtable(filter!(r"^trip_data", readdir()))
Run Code Online (Sandbox Code Playgroud)
但我得到MethodError:没有匹配readtable的方法(:: Array {String,1})
你可以这样做:
reduce(vcat, map(readtable, filter(r"^trip_data", readdir())))
Run Code Online (Sandbox Code Playgroud)
这里map
适用readtable
于匹配的每个文件名filter
(filter!
这里不需要),并将所有结果数据帧连接在一起(vcat
).
同样可以用mapreduce
:
mapreduce(readtable, vcat, filter(r"^trip_data", readdir()))
Run Code Online (Sandbox Code Playgroud)
.
broadcast
在这种情况下,我非常喜欢语法.
即df = readtable.(filter(r"^trip_data", readdir()))
会给你的数据帧的数组(@avysk是正确的,你可能想filter
不会filter!
.
如果您想要一个数据框,那么该mapreduce
选项就是好的.
或者你可以: vcat(readtable.(filter(r"^trip_data", readdir()))
注意:所有这些都是问题的一般解决方案,我有一个适用f
于的函数(方法),x
现在我想将它应用于许多实例或数组x
所以,如果你得到另一个错误,指出不能直接应用功能对任何数组或集合,但你可以到一个单一的元素,那么map
,broadcast
/ .
和列表内涵是你的朋友!