我想合并两个数据框。通过将三个数据帧加在一起来创建第一个数据帧。这些数据框包含不同公司的相同数据。
df_ipos_401 = pd.read_csv("C:/Users/niklas/Documents/BA/Daten/Daten-Regression/401_IPO_data_maximal_csv.csv", header = 0, usecols=['CUSIP9From6_norm','Issuer', 'IssueDate', 'MainSICCode'])
df_ipos_401.columns= (['Issuer','FilingDate', 'SIC-Code', 'Cusip'])
df_ipos_402 = pd.read_csv("C:/Users/niklas/Documents/BA/Daten/Daten-Regression/402_IPO_data_maximal_EDGAR_match.csv", header = 0, usecols=['CUSIP9From6_norm','Issuer', 'IssueDate', 'MainSICCode'])
df_ipos_402.columns= (['Issuer','FilingDate', 'SIC-Code', 'Cusip'])
df_ipos_100 = pd.read_csv("C:/Users/niklas/Documents/BA/Daten/Daten-Regression/100_IPO_data_merged_by_DealNumber_without_any_exclusion.csv", header = 0, usecols=['CUSIP9From6_norm','Issuer', 'IssueDate', 'MainSICCode'])
df_ipos_100.columns= (['Issuer','FilingDate', 'SIC-Code', 'Cusip'])
result_ipos = pd.concat([df_ipos_401,df_ipos_402,df_ipos_100])
df_prep_ipo = result_ipos.drop_duplicates()
这是输出:
Issuer FilingDate SIC-Code Cusip9
0 Sea Pines Co 1973-01-09 7011 811414101
1 Teltronics Services 1973-01-09 1711 879699106
2 Syracuse China Corp 1973-01-11 3262 871668109
3 Universal Security Instruments 1973-01-16 3669 913821104
4 WD-40 Co 1973-01-16 2899 929236107
现在,对于这个新的数据框,我想填写申请数据年份的资产负债表数字。 包含财务数据的另一个数据框(df_fund)如下所示:
Year Cusip9 Name Total Assets Debt Sales Income LogSales Leverage Asset Turnover Margin Revenue Growth
0 2010.0 000361105 AAR CORP 17037270.0 3298020.0 731390.0 17757820.0 13.502702 0.193577 0.042929 24.279550 NaN
1 2011.0 000361105 AAR CORP 21956530.0 6694890.0 677230.0 20744980.0 13.425766 0.304916 0.030844 30.632104 -0.074051
2 2012.0 000361105 AAR CORP 21369000.0 6222000.0 550000.0 21671000.0 13.217674 0.291169 0.025738 39.401818 -0.187868
3 2013.0 000361105 AAR CORP 21995000.0 5643000.0 729000.0 20350000.0 13.499429 0.256558 0.033144 27.914952 0.325455
4 2014.0 000361105 AAR CORP 15150000.0 850000.0 -545000.0 15943000.0 NaN 0.056106 -0.035974 -29.253211 -1.747599
我尝试的代码是这样的:
df_prep_ipo['IPO Year'] = pd.DatetimeIndex(df_prep_ipo['Year']).year
df_ipos = df_prep_ipo.merge(df_fund, left_on=['Cusip9', 'IPO Year'], right_on=['Cusip9', 'Year'])
del df_ipos['Name']
del df_ipos['Year']
该代码适用于单个数据帧,但是在将3个数据帧添加到一个数据帧后,它不再起作用。我收到以下错误消息:KeyError: 'Year'
我认为对于某些公司,我没有各自IPO年的财务数据。因此,我认为放弃这些公司将是最有意义的。有谁知道我该如何解决?
答案 0 :(得分:0)
我认为发生错误是因为df_prep_ipo
和df_fund
没有 Year (年份)列。因此,我们需要首先从df_prep_ipo
的提交日期中提取年份,并将df_fund
的列名从 Year 更改为 IPO Year 。另外,最好将df_fund year更改为int。
在合并之前尝试下面的代码。
df_prep_ipo['IPO Year'] = pd.DatetimeIndex(df_prep_ipo['FilingDate']).year
df_fund = df_fund.rename(columns={'Year': 'IPO Year'})
df_fund['IPO Year'] = df_fund['IPO Year'].astype(int)
如果要删除缺少Year数据的行,请在运行上面的部分之前使用以下代码预处理数据。
df_prep_ipo = df_prep_ipo.dropna(subset=['FilingDate'])
df_fund = df_fund.dronpa(subset=['Year'])