我将尝试解释Julia中的DataFrames是如何工作的,但我遇到了一些困难。
通常我使用DataFrames进行工作——在Python中——每个模拟步骤都会添加新列,并用值填充每一行。
例如,我有一个包含输入数据的DataFrame:
1. Julia可以使用if语句检查是否存在DateTime对象,如果存在则执行相应操作,否则跳过。 2. 可以使用
为了提供可运行和具体的代码,让我们假设条件和函数:
通常我使用DataFrames进行工作——在Python中——每个模拟步骤都会添加新列,并用值填充每一行。
例如,我有一个包含输入数据的DataFrame:
using DataFrames
df = DataFrame( A=Int[], B=Int[] )
push!(df, [1, 10])
push!(df, [2, 20])
push!(df, [3, 30])
现在,假设我基于那些A
和B
列进行计算,生成第三列C
,其中包含DateTime对象。但是,并非所有行都生成DateTime对象,它们可能为空。
- Julia如何处理这种用例?
- 我应该如何创建新的C列并在
for r in eachrow(df)
中分配值?
1. Julia可以使用if语句检查是否存在DateTime对象,如果存在则执行相应操作,否则跳过。 2. 可以使用
df.C = Vector{Union{Nothing, DateTime}}(undef, nrow(df))
创建一个未初始化的C列,然后在循环中使用df.C[i] = value
为每一行分配值。# Pseudocode of what I intend to do
df[! :C] .= nothing
for r in eachrow(df)
if condition
r.C = mySuperComplexFunctionThatReturnsDateTimeForEachRow()
else
r.C = nothing
end
end
为了提供可运行和具体的代码,让我们假设条件和函数:
df[! :C] .= nothing
for r in eachrow(df)
if r.A == 2
r.C = Dates.now()
else
r.C = nothing
end
end
nothing
会导致运行时错误,而使用missing
则会静默地传播missing
。如果您选择使用missing
,请不要忘记将DataFrame列定义为Union{T,Missing}
,例如Union{Float64,Missing}
。 - Antonello