【问题标题】:How to save multiple multidimensional array into one CSV file?如何将多个多维数组保存到一个 CSV 文件中?
【发布时间】:2021-10-20 14:21:20
【问题描述】:

我可以使用以下代码将多个一维数组保存到 CSV 文件中

my_df = pd.DataFrame({"name1" : X, "name2" : y})

另外,我可以将一个多维数组保存到 CSV 文件中。

X, y = make_regression(n_samples=10, n_features=2, n_informative=2, n_targets=1, random_state=1, noise=0.5)
my_df = pd.DataFrame(X)
my_df.to_csv('test_data.csv', index=False, header=True)

这里,X 是一个多维数组,我得到一个 CSV 文件,其中包含 2 个单独列中的 X 的值(如预期的那样)。

现在,如果我想将 Xy 保存在同一个 CSV 文件的不同列中,并且如果我想给出名称 X1X2y1y2 什么我需要更改代码吗?

我预期的 CSV 是 make_regression 函数生成的 Xy 的值。从函数中,我们得到二维X 和二维y。因此,CSV 应该包含 4 列(例如,X1、X2、y1、y2)。

X (shape: (10, 2)) 的值来自 make_regression 函数

[[ 1.62434536 -0.61175641]
 [ 0.04221375  0.58281521]
 [-0.52817175 -1.07296862]
 [ 1.74481176 -0.7612069 ]
 [ 1.13376944 -1.09989127]
 [ 0.86540763 -2.3015387 ]
 [ 1.46210794 -2.06014071]
 [ 0.3190391  -0.24937038]
 [-0.3224172  -0.38405435]
 [-0.17242821 -0.87785842]]

y的值(形状:(10,2))

[[ 7.08380317e+01 -1.49989469e-01]
[ 4.25574119e+01  5.08213909e+01]
[-1.10263835e+02 -1.06685245e+02]
[ 6.81167780e+01 -8.67912040e+00]
[ 3.76517652e+00 -5.56565286e+01]
[-9.82592158e+01 -1.64522187e+02]
[-4.06045719e+01 -1.25819174e+02]
[ 4.61069914e+00 -1.11695124e+01]
[-4.92313307e+01 -4.21097213e+01]
[-7.22908927e+01 -7.91525111e+01]]

预期输出


X1             X2                    y1     y2
 1.62434536 second column fo the X
 0.04221375  
-0.52817175 
 1.74481176 
 1.13376944
 0.86540763 
 1.46210794 
 0.3190391  
-0.3224172 
-0.17242821

【问题讨论】:

  • CSV 主要用于存储表格,但我想您也可以在其中存储一个数组;您能否提供预期 CSV 文件的前几行?
  • @Fravadona 感谢您的评论。我预期的 CSV 是 make_regression 函数生成的 Xy 的值。从函数中,我们得到二维X 和二维y。因此,CSV 应该包含 4 列(例如,X1、X2、y1、y2)。如果我需要更多解释问题,请告诉我。
  • Numpy concatenate 可能是您想要的:my_df = pd.DataFrame( np.concatenate((X, y), axis=0) ) 是否适合您?
  • @Fravadona 应该根据问题axis=1
  • 哎呀,你是对的@0Knowledge ;-)

标签: python python-3.x pandas numpy


【解决方案1】:

您可以使用熊猫concat。我不确定你想要的名字,比如X1X2等等。

    X, y = make_regression(n_samples=10, n_features=2, n_informative=2, n_targets=2, random_state=1, noise=0.5)
    print(X, y)
    full_df = pd.concat([pd.DataFrame(X),pd.DataFrame(y)],axis=1, ignore_index=True)
    full_df.to_csv('test_data.csv', index=False, header=True)
    print(full_df)

函数中的X和y

[[ 1.62434536 -0.61175641]
 [ 0.04221375  0.58281521]
 [-0.52817175 -1.07296862]
 [ 1.74481176 -0.7612069 ]
 [ 1.13376944 -1.09989127]
 [ 0.86540763 -2.3015387 ]
 [ 1.46210794 -2.06014071]
 [ 0.3190391  -0.24937038]
 [-0.3224172  -0.38405435]
 [-0.17242821 -0.87785842]] [[ 7.08380317e+01 -1.49989469e-01]
 [ 4.25574119e+01  5.08213909e+01]
 [-1.10263835e+02 -1.06685245e+02]
 [ 6.81167780e+01 -8.67912040e+00]
 [ 3.76517652e+00 -5.56565286e+01]
 [-9.82592158e+01 -1.64522187e+02]
 [-4.06045719e+01 -1.25819174e+02]
 [ 4.61069914e+00 -1.11695124e+01]
 [-4.92313307e+01 -4.21097213e+01]
 [-7.22908927e+01 -7.91525111e+01]]

concat之后的输出

          0         1           2           3
0  1.624345 -0.611756   70.838032   -0.149989
1  0.042214  0.582815   42.557412   50.821391
2 -0.528172 -1.072969 -110.263835 -106.685245
3  1.744812 -0.761207   68.116778   -8.679120
4  1.133769 -1.099891    3.765177  -55.656529
5  0.865408 -2.301539  -98.259216 -164.522187
6  1.462108 -2.060141  -40.604572 -125.819174
7  0.319039 -0.249370    4.610699  -11.169512
8 -0.322417 -0.384054  -49.231331  -42.109721
9 -0.172428 -0.877858  -72.290893  -79.152511

【讨论】:

    【解决方案2】:

    根据您的更新:

    你可以像 pandas 一样对 numpy 数组进行切片。

    import numpy as np
    import pandas as pd
    
    x = np.array([np.arange(0, 10), np.arange(10,20)])
    x.reshape(10, 2)
    
    pd.DataFrame({
        'x0': x[0, :],
        'x1': x[1, :]
    })
    

    【讨论】:

    • 你介意在这里举一个完整的例子吗?
    • @Opps_0 添加了一个示例
    • 谢谢,但我认为这不符合我的目的。因为我的 X 和 y 不是单独从函数 make_rgression 生成的。
    • 你能显示一个示例输出吗? @Opps_0
    • 您能否编写一个示例代码来说明您的输出是什么样的以及您希望输出是什么样的@Opps_0
    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 2013-08-23
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 2016-02-03
    • 2020-11-12
    • 1970-01-01
    相关资源
    最近更新 更多