Python 使用datetime64类型作为映射值的函数
我正试图从dictPython 使用datetime64类型作为映射值的函数,python,pandas,Python,Pandas,我正试图从dictweather向我的数据框data添加一个新列Temperature。使用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']
weather
向我的数据框data
添加一个新列Temperature
。使用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
weather = weather.to_dict('split')
生成具有结构的词典
{'columns': [...],
'data': [...],
'index': [...] }
{'match_value_1': 2,
'match_value_2': 3,
etc. }
然而,如果你想把map和口述词一起使用,你应该有一个带结构的口述词
{'columns': [...],
'data': [...],
'index': [...] }
{'match_value_1': 2,
'match_value_2': 3,
etc. }
假设您不想在开始时更改字典表示的类型,那么您可以稍后转换dict以适应上述方法:
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')
这取决于您的逻辑,无论您希望执行何种合并。如果您需要进一步的帮助,请对此进行详细说明。您调试过吗?请在每次操作后检查您的结果是否正确,并将调试结果添加到此帖子中。尝试将索引id添加到dict。在我看来,问题在于关键示例:-df.set_index('id')。T.to_dict('list')@Cezary.Sz我对编程相当陌生,所以我的调试方法就是大量的打印语句。@J先生,这在很大程度上对我有效,但当我打印数据类型时,数据以对象的形式出现,当我打印数据时,所有数据都显示在方括号中,例如“[32.0]”。当我尝试进行任何类型的转换时,我总是遇到错误“ValueError:使用序列设置数组元素”。你的第一个使用“zip”的建议对我很有效,你能解释一下“list(zip(*weather['data'])”和“dict(zip(weather[0],weather[1])”块实际上在做什么吗?哦,我更新了我的答案。主要部分是创建字典,以便将日期映射到度数。