Как сохранить несколько многомерных массивов в один CSV-файл?

#python #python-3.x #pandas #numpy

Вопрос:

Я могу сохранить несколько одномерных массивов в 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, который содержит значение X в 2 отдельных столбцах (как и ожидалось).

Теперь, если я хочу сохранить оба X и y в отдельных столбцах одного и того же CSV-файла и если я хочу дать имена X1 , X2 , y1 , и y2 что мне нужно изменить в коде?

Мой ожидаемый CSV-это значение X и y , сгенерированное make_regression функцией. Из функции мы получаем 2-мерную X и двумерную y . Таким образом, CSV должен содержать 4 столбца (скажем, X1, X2, y1, y2).

Значение X (форма: (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  

Комментарии:

1. CSV в основном предназначен для хранения таблиц, но я думаю, что вы также можете хранить в нем массив; Можете ли вы предоставить первые несколько строк ожидаемого CSV-файла?

2. @Fravadona спасибо за комментарий. Мой ожидаемый CSV-это значение X и y , сгенерированное make_regression функцией. Из функции мы получаем 2-мерную X и двумерную y . Таким образом, CSV должен содержать 4 столбца (скажем, X1, X2, y1, y2). Дайте мне знать, если мне нужно будет подробнее объяснить проблему.

3. Numpy concatenate может быть тем, что вы ищете: my_df = pd.DataFrame( np.concatenate((X, y), axis=0) ) работает ли это для вас ?

4. @Fravadona должен axis=1 в соответствии с вопросом

5. опси, ты прав @0Knowledge 😉

Ответ №1:

Вы можете использовать панд concat . Я не уверен в том , какое имя вам хотелось бы X1 , X2 и так далее.

 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:

На основе вашего обновления:

Вы можете нарезать массив 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, :] })  

Комментарии:

1. Не могли бы вы привести здесь полный пример?

2. @Opps_0 добавил пример

3. Спасибо, но я думаю, что это не послужит моей цели. Потому что мои X и y генерируются из функции make_rgression не отдельно.

4. Можете ли вы показать пример вывода? @Opps_0

5. Можете ли вы просто составить пример кода того, как выглядит ваш вывод и как вы хотите, чтобы вывод выглядел как @Opps_0