我正尝试从字典Temperature
向我的数据框data
添加新列weather
。使用map()
函数将data
中的日期与weather
中的日期进行匹配,两者均为datetime64
格式。
import pandas as pd
# Import first dataset and convert dates to datetime64
filename = 'Process Data.csv'
data = pd.read_csv(filename)
data['trans_date1'] = pd.to_datetime(data.trans_date1)
# Import second dataset and convert dates to datetime64
filenameWeather = '2014-2018 Weather Data.csv'
dataWeather = pd.read_csv(filenameWeather, parse_dates=True)
dataWeather['Date_Time'] = pd.to_datetime(dataWeather.Date_Time)
# Create new dataframe to hold only the date and temp
weather = dataWeather[[('Date_Time'), 'Mean_Temp_?C']].copy()
# Convert this to a dict
weather = weather.to_dict('split')
# map weather data to main dataset
data['Temperature'] = data['trans_date1'].map(weather)
这不会产生错误,但是不会复制任何温度,它们都是NaN
。我也尝试过使用不同的选项将数据帧转换为dict(序列,拆分,索引,列表,但记录会产生错误)。
我已经检查了日期和温度,并且数据确实存在,因此它应该已经找到了要映射到特定日期的内容。
我还尝试过在映射之前将日期转换为字符串,这也不会导致错误,但是它只会为NaN
中的所有内容输出Temperature
。
答案 0 :(得分:0)
weather = weather.to_dict('split')
产生具有结构的字典
{'columns': [...],
'data': [...],
'index': [...] }
但是,如果您想将地图与词典结合使用,则词典应具有结构
{'match_value_1': 2,
'match_value_2': 3,
etc. }
假设您不想在一开始就更改字典表示形式的类型,那么您可以稍后再转换字典以适应上述方法:
data['Temperature'] = data['trans_date1'].map(dict(weather['data']))
或者您从字典中重建一个数据框并合并它们:
weather = pandas.DataFrame(temps['data'], columns=['Date_Time', 'Mean_Temp_?C'])
df1 = df1.merge(weather, how='inner', left_on='trans_date1', right_on='Date_Time')
要执行哪种合并取决于您的逻辑。如果您需要进一步的帮助,请对此进行详细说明。