Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用datetime64类型作为映射值的函数_Python_Pandas - Fatal编程技术网

Python 使用datetime64类型作为映射值的函数

Python 使用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']

我正试图从dict
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])”块实际上在做什么吗?哦,我更新了我的答案。主要部分是创建字典,以便将日期映射到度数。