Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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 如何解决合并错误:密钥必须是整数或时间戳?_Python_Python 3.x_Pandas_Dataframe - Fatal编程技术网

Python 如何解决合并错误:密钥必须是整数或时间戳?

Python 如何解决合并错误:密钥必须是整数或时间戳?,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我正在尝试合并到熊猫数据帧,一个称为DAILY,另一个称为SF1 每日csv: ticker,date,lastupdated,ev,evebit,evebitda,marketcap,pb,pe,ps A,2020-09-14,2020-09-14,31617.1,36.3,26.8,30652.1,6.2,44.4,5.9 SF1 csv(不确定为什么股票代码缩进,忽略它): 数据排序/清理代码: sf1 = sf1.drop(columns=['number','dimension',

我正在尝试合并到熊猫数据帧,一个称为DAILY,另一个称为SF1

每日csv:

ticker,date,lastupdated,ev,evebit,evebitda,marketcap,pb,pe,ps
A,2020-09-14,2020-09-14,31617.1,36.3,26.8,30652.1,6.2,44.4,5.9
SF1 csv(不确定为什么股票代码缩进,忽略它):

数据排序/清理代码:

sf1 = sf1.drop(columns=['number','dimension', 'datekey', 'reportperiod','lastupdated', 'ev', 'evebit', 'evebitda', 'marketcap', 'pb', 'pe', 'ps'])

daily = daily.sort_values('date', ascending=True)
sf1 = sf1.sort_values('calendardate', ascending=True)
daily = daily.sort_values('ticker')
sf1 = sf1.sort_values('ticker')
合并数据帧的代码:

df = pd.merge_asof(daily, sf1, by = 'ticker', left_on='date', right_on='calendardate', tolerance=pd.Timedelta(value=100, unit='D'), direction='backward')
df = pd.merge_asof(daily, sf1, by = 'ticker', left_on='date', right_on='calendardate', tolerance=pd.Timedelta(value=100, unit='D'), direction='backward')
我认为可能导致错误的原因是数据帧被ticker列合并。我不确定这是否必须是int或dateformat,或任何特定的格式。目前,它只是上述公司的股票代码

数据帧合并在每日csv的日期列和SF1 csv的日历日期列中


如果有人也能区分通过合并
时发生的情况,以及如果您只打开
left\u
right\u
,您将面临这个问题,因为您的
日期列在'daily'
日历日期列在
'sf1'属于
对象类型
,即
字符串

只需通过
pd.to\u datetime()
方法将其类型更改为
datatime

因此,只需在数据排序/清理代码中添加这两行代码即可:-

daily['date']=pd.to_datetime(daily['date'])
sf1['calendardate']=pd.to_datetime(sf1['calendardate'])
现在写:-

df = pd.merge_asof(daily, sf1, by = 'ticker', left_on='date', right_on='calendardate', tolerance=pd.Timedelta(value=100, unit='D'), direction='backward')