Объединение двух файлов CSV с помощью Pandas

Я пытаюсь объединить два разных файла csv с помощью Pandas, но при этом сталкиваюсь с ошибками.

Первый файл - aapl.csv, он выглядит так:

          Date   Close      High       Low      Open    Volume
Symbol                                                            
AAPL    2017-05-25  153.87  154.3500  153.0300  153.7300  19235598
AAPL    2017-05-26  153.61  154.2400  153.3100  154.0000  21927637

Второй файл - corr_column.csv, он выглядит так:

Corr
0.01
0.02

Я хочу объединить их таким образом, чтобы «Corr» отображалось в виде столбца после «Volume».

Я пробовал использовать pd.concat, как указано в документации:

https://pandas.pydata.org/pandas-docs/stable/merging.html

Это мой код:

import datetime as dt
import matplotlib.pyplot as plt
from matplotlib import style
import pandas as pd
pd.core.common.is_list_like = pd.api.types.is_list_like
import pandas_datareader.data as web
from mpl_finance import candlestick_ohlc
import matplotlib.dates as mdates
from matplotlib.dates import DateFormatter, MonthLocator, YearLocator, DayLocator
style.use( 'ggplot' )


##start = dt.datetime( 2017, 5, 29 )
##end = dt.datetime( 2018, 5, 29 )
##
##
##df = web.DataReader( AAPL, 'morningstar', start, end )
##
##df.to_csv( aapl.csv )

df = pd.read_csv( '/Users/zubairjohal/Documents/aapl.csv' ,         parse_dates=True, index_col=0 )
df_ohlc = df


corr_data = pd.read_csv( '/Users/zubairjohal/Documents/corr_column.csv', parse_dates=True, index_col=0 )


corr_data.dropna( inplace=True )


df.dropna( inplace=True )


merged = pd.concat( [ df, corr_data ], axis=1 )

merged.to_csv( 'combine2.csv', index=False )

print( merged )

Однако при его печати я обнаружил ошибку, как показано ниже:

Traceback (most recent call last):
File "/Users/zubairjohal/Documents/nw5.py", line 34, in <module>
merged = pd.concat( [ df, corr_data ], axis=1 )
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/core/reshape/concat.py", line 226, in concat
return op.get_result()
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/core/reshape/concat.py", line 423, in get_result
copy=self.copy)
File     "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-  packages/pandas/core/internals.py", line 5425, in concatenate_block_managers
return BlockManager(blocks, axes)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/core/internals.py", line 3282, in __init__
self._verify_integrity()
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/core/internals.py", line 3493, in _verify_integrity
construction_error(tot_items, block.shape[1:], self.axes)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/core/internals.py", line 4843, in construction_error
passed, implied))
ValueError: Shape of passed values is (6, 68896), indices imply (6, 514)

Приветствуются любые предложения, ссылки или альтернативы.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
0
1 437
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете попробовать это:

pd.concat([df_ohlc.reset_index(), corr_data], axis=1).set_index("Symbol")

выходы:

        Close        Date    High     Low    Open      Volume  Corr
Symbol                                                              
AAPL   153.87  2017-05-25  154.35  153.03  153.73  19235598.0  0.01
AAPL   153.61  2017-05-26  154.24  153.31  154.00  21927637.0  0.02

Это работает, если ваши фреймы данных находятся в том виде, в котором вы их напечатали, df_ohlc с AAPL в качестве индекса и corr без индекса.

Спасибо за вклад. Я попытался внести изменения, но получаю новую ошибку «Ключевая ошибка: 'Индекс'». Я проверил, и в обоих этих файлах одинаковое количество строк, то есть 262. Есть предложения?

zcdp 29.05.2018 23:59

Собственно, прошу прощения. При вставке данных я пропустил заголовок столбца. Я обновил свой пост о том, как выглядят данные df_ohlc. Пожалуйста, посмотрите @MohammedALANI

zcdp 30.05.2018 00:05

@zcdp Я отредактировал, просто заменил index на Symbol

Mohamed AL ANI 30.05.2018 00:13

@MohammedALANI, это делает работу. Спасибо! В то же время, если у меня есть файл csv, похожий на core_column, с данными в виде списка вместо столбцов (например: [0,01, 0,02 ..... 1,00], как в этом случае можно выполнить слияние?

zcdp 30.05.2018 00:34

@zcdp Не беспокойтесь! Пожалуйста, подтвердите мой ответ, чтобы люди, у которых возникла такая же проблема, как вы, легко могли найти решение

Mohamed AL ANI 30.05.2018 00:37

Просто преобразуйте список в столбец: df_corr = pd.DataFrame (); df_corr ["corr"] = [0,01, ...]

Mohamed AL ANI 30.05.2018 00:38

Другие вопросы по теме