Julia pandas-如何将数据帧附加在一起

Julia pandas-如何将数据帧附加在一起,pandas,dataframe,julia,pycall,Pandas,Dataframe,Julia,Pycall,与Julia 1.0合作 我有大量的数据帧,我使用pandas(read_csv)读入Julia,我正在寻找一种方法将它们全部附加到一个大数据帧中。由于某些原因,“append”函数不能起作用。下面是一个简化的例子: using Pandas df = Pandas.DataFrame([[1, 2], [3, 4]], columns=['A', 'B']) df2 = Pandas.DataFrame([[5, 6], [7, 8]], columns=['A', 'B']) df[

与Julia 1.0合作 我有大量的数据帧,我使用pandas(read_csv)读入Julia,我正在寻找一种方法将它们全部附加到一个大数据帧中。由于某些原因,“append”函数不能起作用。下面是一个简化的例子:

using Pandas 

df = Pandas.DataFrame([[1, 2], [3, 4]], columns=['A', 'B'])

df2 = Pandas.DataFrame([[5, 6], [7, 8]], columns=['A', 'B'])

df[:append](df2)  #fails

df.append(df2)    #fails

df[:concat](df2)  #fails

vcat(df,df2)       
最后一步可以工作,但会生成一个2元素数组,每个元素都是一个数据帧


有没有关于如何将两个数据帧一个堆叠在另一个之下的想法?

既然您说您有很多数据帧,您可以将它们添加到列表中。然后pd.concat列表,并将第一个文件的头(假设它们都具有相同的头)作为新数据帧的头。这将跳过所有数据帧中的第一行,因此其中没有一堆标题行

dfs = [df, df2]

df3 = pd.DataFrame(pd.concat(dfs), columns=df.columns)

因为您说过您有很多数据帧,所以可以将它们添加到列表中。然后pd.concat列表,并将第一个文件的头(假设它们都具有相同的头)作为新数据帧的头。这将跳过所有数据帧中的第一行,因此其中没有一堆标题行

dfs = [df, df2]

df3 = pd.DataFrame(pd.concat(dfs), columns=df.columns)
这似乎有效

julia> df = Pandas.DataFrame([[1, 2], [3, 4]], columns=[:A, :B])
   A  B
0  1  2
1  3  4


julia> df2 = Pandas.DataFrame([[5, 6], [7, 8]], columns=[:A, :B])
   A  B
0  5  6
1  7  8


julia> df.pyo[:append](df2, ignore_index = true )
PyObject    A  B
0  1  2
1  3  4
2  5  6
3  7  8
注:

  • 我不知道这是Pandas还是julia 1.0 PyCall,但在调用方法之前,对象似乎需要显式地使用.pyo字段。如果您尝试
    df[:append]
    ,它将尝试将其解释为您试图为
    :append
    :列编制索引。试着做
    df[:col3]=3
    看看我的意思
  • 有一个本地数据帧包。没有必要使用熊猫,除非你有一些奇怪的“我已经准备好了代码”的问题。即使这样,在Julia中通过Python层使用Pandas也可能会使事情变得复杂
作为参考,以下是julia DataFrames中的等效项:

julia> df  = DataFrames.DataFrame( [1:2, 3:4], [:A, :B]);
julia> df2 = DataFrames.DataFrame( [5:6, 7:8], [:A, :B]);
julia> append!(df, df2)
4×2 DataFrames.DataFrame
│ Row │ A │ B │
├─────┼───┼───┤
│ 1   │ 1 │ 3 │
│ 2   │ 2 │ 4 │
│ 3   │ 5 │ 7 │
│ 4   │ 6 │ 8 │
这似乎有效

julia> df = Pandas.DataFrame([[1, 2], [3, 4]], columns=[:A, :B])
   A  B
0  1  2
1  3  4


julia> df2 = Pandas.DataFrame([[5, 6], [7, 8]], columns=[:A, :B])
   A  B
0  5  6
1  7  8


julia> df.pyo[:append](df2, ignore_index = true )
PyObject    A  B
0  1  2
1  3  4
2  5  6
3  7  8
注:

  • 我不知道这是Pandas还是julia 1.0 PyCall,但在调用方法之前,对象似乎需要显式地使用.pyo字段。如果您尝试
    df[:append]
    ,它将尝试将其解释为您试图为
    :append
    :列编制索引。试着做
    df[:col3]=3
    看看我的意思
  • 有一个本地数据帧包。没有必要使用熊猫,除非你有一些奇怪的“我已经准备好了代码”的问题。即使这样,在Julia中通过Python层使用Pandas也可能会使事情变得复杂
作为参考,以下是julia DataFrames中的等效项:

julia> df  = DataFrames.DataFrame( [1:2, 3:4], [:A, :B]);
julia> df2 = DataFrames.DataFrame( [5:6, 7:8], [:A, :B]);
julia> append!(df, df2)
4×2 DataFrames.DataFrame
│ Row │ A │ B │
├─────┼───┼───┤
│ 1   │ 1 │ 3 │
│ 2   │ 2 │ 4 │
│ 3   │ 5 │ 7 │
│ 4   │ 6 │ 8 │

现在有一只朱莉娅熊猫了*facepalm*它是python pandas的包装器。@crstnbr使用“本机”Julia DataFrames包更快吗?现在有了Julia pandas*facepalm*它是python的包装器。@crstnbr使用“本机”Julia DataFrames包是否更快?谢谢您的回复!我之所以使用Pandas,是因为Julia native CSV.read读取数百个我需要读取的CSV文件的速度非常慢。当我在Julia中加载pandas时,Julia数据帧有某种冲突,无法工作。我宁愿远离熊猫,但我一直无法有效地使用数据帧。@SilopS我真的很好奇。
Pandas.jl
CSV.jl
之间的
DataFrame
构建时间的比率是多少?你试过了吗?它的速度比较如何?CSV.jl几乎需要2分钟,而带有Pandas read_CSV的Julia代码大约需要15秒。虽然我应该修改我最初的评论,说最初我甚至不能用CSV.jl读取所有文件,因为它是毁灭性的。我必须将“rows\u for_type\u detect=”设置为一个较大的数字才能成功读取所有文件。在我的案例中,CSVFiles.jl没有加载,因为“检测到包的不可满足要求”。我也无法将JuliaDB与我最近下载的Julia 1.0一起使用。CSV.jl正在推出一个新版本,它将使它变得更快。也许你也可以试试更简单的读者。谢谢你的回复!我之所以使用Pandas,是因为Julia native CSV.read读取数百个我需要读取的CSV文件的速度非常慢。当我在Julia中加载pandas时,Julia数据帧有某种冲突,无法工作。我宁愿远离熊猫,但我一直无法有效地使用数据帧。@SilopS我真的很好奇。
Pandas.jl
CSV.jl
之间的
DataFrame
构建时间的比率是多少?你试过了吗?它的速度比较如何?CSV.jl几乎需要2分钟,而带有Pandas read_CSV的Julia代码大约需要15秒。虽然我应该修改我最初的评论,说最初我甚至不能用CSV.jl读取所有文件,因为它是毁灭性的。我必须将“rows\u for_type\u detect=”设置为一个较大的数字才能成功读取所有文件。在我的案例中,CSVFiles.jl没有加载,因为“检测到包的不可满足要求”。我也无法将JuliaDB与我最近下载的Julia 1.0一起使用。CSV.jl正在推出一个新版本,它将使它变得更快。也许你也可以试试更简单的读本。