【发布时间】:2019-11-26 11:52:19
【问题描述】:
我创建了一个名为“list_data”的列表,其中包含来自许多文件的变量。我还有一个名为“observation_data”的数据框。 我正在尝试将这两个文件与关键的“时间”合并,但无事可做,我所有的尝试都失败了。这是我的代码和结果
path = "v9/As CA-Previsions-"
path_previsions = ["D S.csv", "Map.csv", "We.csv", "Wu.csv"]
path_observations = "v9/As CA-Observations.csv"
def get_forecast(path, path_previsions, path_observations):
list_data = []
for forecaster in path_previsions:
dataframe = pd.read_csv(path + forecaster, sep=";").dropna(subset=["temperature"]).dropna()
dataframe["time"] = pd.to_datetime(dataframe['time'], format='%d-%m-%Y %H:%M:%S')
dataframe.sort_values(by=['time'])
dataframe['time'] = dataframe['time'].apply(lambda x: x.replace(minute=0, second=0)) #Conserve just hour
dataframe = dataframe.groupby(['time']).mean()
dataframe.columns = [x + "_" + forecaster.split('.')[0] for x in dataframe.columns]
list_data.append(dataframe)
observation_data = pd.read_csv(path_observations, sep=";", index_col=False).drop(columns=["station"]).dropna()
observation_data["time"] = pd.to_datetime(observation_data['time'], format='%d-%m-%Y %H:%M:%S')
observation_data.sort_values(by='time')
observation_data['time'] = observation_data['time'].apply(lambda x: x.replace(minute=0, second=0))
observation_data = observation_data.groupby(['time']).mean()
observation_data=observation_data.rename(index=str, columns={"humidity": "humidity_Y", "precipitation": "precipitation_Y", "temperature":"temperature_Y"})
return list_data, observation_data
我已经试过了:
list_data, observation_data = get_forecast(path, path_previsions, path_observations)
X = pd.concat(list_data, axis=1, join='inner')
Y = observation_data
df_forcast_cap = pd.concat([X,Y], axis=1, join='inner')
返回一个0行35列的元素
我也试过了:
X = [list_data]
X = pd.merge(X, how='inner')
也没有成功: 类型错误:merge() 缺少 1 个必需的位置参数:'right'
在merge和concact试探之前,我的list_data和observation_data都不为空,这里举个例子:
list_data : (列表)
[[ cl_co_D S hu_D S \
time
2019-02-20 12:00:00 0.00 58.000000
2019-02-20 13:00:00 0.00 55.000000
2019-02-20 14:00:00 0.00 53.000000
observation_data : (pandas.core.frame.DataFrame)
humidity_Y precipitation_Y temperature_Y
time
2019-02-28 10:00:00 61.000000 0.0 16.125000
2019-02-28 11:00:00 45.250000 0.0 19.925000
我也尝试将我的列表转换为数据框:
X = pd.DataFrame(list_data)
print(X)
但我得到的东西根本不好:
0
0 cloud_cover_Dark Sky hum...
1 cloud_cover_OpenWeatherMa...
2 cloud_cover_Weatherbit h...
3 cloud_cover_Wunderground ...
我可以将这个列表和数据框合并在一起吗?
【问题讨论】:
-
我终于得到了解决方案:之前,我一起运行了以下几行:list_data,observation_data = get_forecast(path, path_previsions, path_observations) X = pd.concat(list_data, axis=1, join=' inner') Y = observation_data df_forcast_cap = pd.concat([X,Y], axis=1, join='inner') 所以我尝试在第一次运行前 3 行,然后在另一个 Jupiter 笔记本中运行“块”我跑了其他行,我得到了想要的结果。所以我的错误只是将所有这些行同时运行。
-
我还将“X = pd.concat(list_data, axis=1, join='inner')”更改为“df_forcast_cap = pd.merge(X, Y, right_index=True, left_index =True)" 一切正常
标签: python pandas datetime merge concatenation