Python 如何解决合并错误:密钥必须是整数或时间戳?
我正在尝试合并到熊猫数据帧,一个称为DAILY,另一个称为SF1 每日csv: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',
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')