#python #pandas #dataframe #merge
Вопрос:
У меня есть около 100 файлов .csv в папке с некоторыми фиктивными данными.
они называются как AA.csv, BB.csv, CC.csv…………………
Имя файла «AA», «BB», «CC» здесь являются символами. Каждый кадр данных будет иметь символ. Итак, здесь у нас есть 100 символов.
Date Open High Low Close Adj Close Volume
2014-09-02 38.849998 38.990002 38.580002 38.740002 35.522366 6196200
2014-09-03 38.779999 38.965000 38.349998 38.395000 35.206020 6796800
2014-09-04 38.400002 38.685001 38.380001 38.580002 35.375645 5741000
Я хочу объединить 100 кадров данных в один кадр данных. Окончательный кадр данных будет содержать 101 столбец.
Столбец даты и один столбец для каждого из 100 символов, этот столбец будет содержать возвращаемое значение, которое мы вычисляем для этого символа. Я хочу объединить так, чтобы он содержал только пересечение дат между символами.
Я знаю, что мы можем использовать concat, прочитав каждый csv-файл и объединив их в один фрейм данных singal. Но я хочу сделать это с помощью «слияния». Возможно ли это? Как я могу это сделать?
Ответ №1:
Вы можете использовать pandas.merge для объединения данных на основе ключа «Дата». Поскольку вы можете захотеть объединить более двух кадров данных одновременно, вы можете использовать functools.reduce.
Допустим, данные, которые вы читаете из CSV-файлов, будут выглядеть следующим образом.
import pandas as pd
df_1 = pd.DataFrame({
"Date": ["2014-09-02", "2014-09-03", "2014-09-04"],
"Open": [38.849998, 38.779999, 38.400002]
})
df_2 = pd.DataFrame({
"Date": ["2014-09-02", "2014-09-03", "2014-09-04"],
"High": [38.990002, 38.965000, 38.685001]
})
df_3 = pd.DataFrame({
"Date": ["2014-09-02", "2014-09-03", "2014-09-04"],
"Low": [38.580002, 38.349998, 38.380001]
})
dfs = [df_1, df_2, df_3]
Тогда вы сможете сделать:
import pandas as pd
from functools import reduce
df = reduce(lambda left, right: pd.merge(left, right, on=['Date'],
how='outer'), dfs)
df тогда будет:
Date Open High Low
0 2014-09-02 38.849998 38.990002 38.580002
1 2014-09-03 38.779999 38.965000 38.349998
2 2014-09-04 38.400002 38.685001 38.380001
Вы также должны прочитать документацию о параметре » как » в документации pandas.