Как сопоставить значения столбца данных с правильными строками в других данных? - PullRequest
1 голос
/ 20 октября 2019

У меня есть несколько CSV-файлов с датами (как ежедневно) и данными о температуре. Файлы, однако, приходят в разные даты (иногда перекрываются, имеют пропущенные даты…). Что я хочу сделать, это создать исходный файл с первым столбцом в качестве даты (включая все даты) и добавить столбцы данных о температуре из разных файлов CSV, соответствующих дате.

, чтобы упростить его, я рассматриваю, что у меня есть только один файл (df1). Поэтому я определил дату и время (df2) в качестве исходного файла и попытался использовать pd.concate (), чтобы добавить в него df1. Это работает, но это удаляет даты, которые не доступны из df1, в то время как я хочу сохранить все строки.

import pandas as pd
data = {'Datestart':['1/1/2010', '1/2/2010', '1/5/2010', '1/10/2010'],   'Temp':[20, 21, 19, 18]} 
df1 = pd.DataFrame(data)
df2 = pd.DataFrame()
df2['Date'] = pd.date_range(start='1/1/2010', end='1/20/2010', freq='D')
df3 = pd.concat([df2.set_index('Date'),     df1.set_index('Datestart').Temp],axis=1,join='inner')

он создает это:

            Temp
2010-01-01    20
2010-01-02    21
2010-01-05    19
2010-01-10    18

, пока мне нужно это:

1/1/2010   20
1/2/2010   21
1/3/2010   NaN
1/4/2010   NaN
1/5/2010   19
1/6/2010   NaN
1/7/2010   NaN
1/8/2010   NaN
1/9/2010   NaN
1/15/2010   18
1/16/2010  NaN
1/17/2010  NaN
1/20/2010  NaN
1/21/2010  NaN

Ответы [ 2 ]

2 голосов
/ 21 октября 2019

Попробуйте сначала преобразовать Datestart в дату и время, а затем объединить.

df1['Datestart'] = pd.to_datetime(df1['Datestart'])
df3 = df1.merge(df2, how = "outer", left_on = 'Datestart', right_on = 'Date')

Затем вы можете удалить столбец Datestart и переформатировать столбец даты.

df3.drop('Datestart', axis = 1, inplace = True)
df3['Date'] = df3['Date'].dt.strftime('%m/%d/%Y') 
df3.set_index('Date', inplace = True)
df3.sort_index(inplace = True)


#Prints
            Temp
Date            
01/01/2010  20.0
01/02/2010  21.0
01/03/2010   NaN
01/04/2010   NaN
01/05/2010  19.0
01/06/2010   NaN
01/07/2010   NaN
01/08/2010   NaN
01/09/2010   NaN
01/10/2010  18.0
01/11/2010   NaN
01/12/2010   NaN
01/13/2010   NaN
01/14/2010   NaN
01/15/2010   NaN
01/16/2010   NaN
01/17/2010   NaN
01/18/2010   NaN
01/19/2010   NaN
01/20/2010   NaN
1 голос
/ 21 октября 2019

При вызове pd.concat попробуйте использовать join=outer вместо join=inner. Это должно вернуть записи из обоих наборов данных.

...