提问人:Dun 提问时间:11/2/2023 更新时间:11/4/2023 访问量:51
合并过程中的问题:要么没有数据输出,要么只是通过将数据中的列加倍来合并它们
Problem during merge: either gets no data output, or simply merges them by doubling the column in data
问:
# Here's the first try:
# Create a custom function for merging the data together:
def getXDataMerged():
print('Income Statement CSV data is(rows, columns): ', df1.shape)
print('Balance Sheet CSV data is: ', df2.shape)
print('Cash Flow CSV data is: ' , df3.shape)
# Merge the data together
result = pd.merge(df1, df2, on=['Ticker', 'SimFinId', 'Currency',
'Fiscal Year', 'Fiscal Period', 'Report Date', 'Publish Date'], how='inner')
result = pd.merge(result, df3, on=['Ticker','SimFinId','Currency',
'Fiscal Year','Report Date','Publish Date'])
print('Merged X data matrix shape is: ', result.shape)
return result
# Use getXDataMerged() to retrieve some data, and then save it to a CSV file named "Annual_Stock_Price_Fundamentals.csv"
X = getXDataMerged()
X.to_csv("Annual_Stock_Price_Fundamentals.csv")
# Output for first try:
Income Statement CSV data is(rows, columns): (17185, 28)
Balance Sheet CSV data is: (17185, 30)
Cash Flow CSV data is: (17185, 28)
Merged X data matrix shape is: (0, 73)
# Second try (only changed the merging method to 'outer', everything else stays the same:
# Merge the data together
result = pd.merge(df1, df2, on=['Ticker', 'SimFinId', 'Currency',
'Fiscal Year', 'Fiscal Period', 'Report Date', 'Publish Date'], how='outer')
result = pd.merge(result, df3, on=['Ticker','SimFinId','Currency',
'Fiscal Year','Report Date','Publish Date'])
# Output for second try:
Income Statement CSV data is(rows, columns): (17185, 28)
Balance Sheet CSV data is: (17185, 30)
Cash Flow CSV data is: (17185, 28)
Merged X data matrix shape is: (34370, 73)
我尝试使用“内部”合并数据,然后没有得到任何数据。
我尝试使用“outer”合并数据,然后将列加倍,但无法通过合并公共值对它们进行排序。
答:
0赞
jeste_artyste
11/2/2023
#1
我看不到您的数据,因此很难判断问题究竟出在哪里,但是当使用 pd.merge() 方法的“inner”语句时,新 DataFrame 将只有来自两个 DataFrame 对象的匹配键,您尝试合并。如果您在两个帧中都有相同的键,那么使用“内部”总是好的,据我了解,您的数据是不可复制的,并且您在尝试合并的帧中有不同的值,这就是为什么合并后没有值的原因。例如。列“SimFindID”不相同,对于两个数据帧,这就是它不匹配结果的原因。尝试使用较少的列进行合并。
就合并的“外部”方法而言,故事是相同的,但它为您提供了“不匹配”的数据行,因此这就是为什么您不会以任何方式对其进行排序的原因,因为两个帧的所有行都不同。
如果您想要实现的只是一起添加到帧中,请使用 pd.merge() 方法的“cross”选项或查看两个 DataFrame 中是否有任何匹配的键,并仅选择匹配的列。
如果您需要更多帮助,请添加您的数据供我查看
评论
0赞
Dun
11/3/2023
这是我的 GitHub。文件 (github.com/GitItD/Python-AI)。那里的 .csv 文件应该有正确的数据。我上面给出的代码只是整个代码的一部分。我没有直接从 .csv 文件使用它,而是从 Simfin 网站上传了数据帧。
0赞
jeste_artyste
11/3/2023
@Dun 我们找到了!问题在于您的数据的外观。CSV 文件为“逗号分隔”。csvs 中的是“;”,而不是“,”。您这里有 2 个选项,或者您需要将参数添加到 pd.read_csv() 方法中,参数“sep=”;“”,以将其划分到列等中。问题是,您的列名在奇怪的地方有“”,这就是为什么它没有解析所有列名的原因。我做了什么 - 我在记事本中编辑了文件本身。删除了列名中的“”,并将“;”改为“;”。这是读取数据本身时遇到的第一个问题
0赞
jeste_artyste
11/3/2023
第二件事是 - 您尝试合并行,这与示例不同:在“us-balance-annual.csv”和“us-income-annual.csv”的合并中,您尝试在“财政期”上合并它,问题是,第一个文件,您在第二个“FY”中将“Q4”作为唯一值。正如我之前在回答中所写的那样,它不适用于“内部”合并方法。查看您的数据,相互比较,然后合并即可正常工作。请记住,对于合并,请粘贴在值方面相同的列
0赞
jeste_artyste
11/3/2023
我所做的是:new_df = pd.merge(df1, df2, on=['Ticker', 'SimFinId', 'Currency', 'Fiscal Year'], how='inner'),它就像一个魅力。希望它有所帮助,如果您有更多问题,请告诉我
0赞
Dun
11/4/2023
感谢您的输入。我能够使用与您不同的方法解决它。我不确定这是否是一个好方法,但它有效。我仍然认为输出图看起来不对,但与数字没有不一致。请参阅下面的回答。
0赞
Dun
11/4/2023
#2
我的方法:
def getXDataMerged(myLocalPath='C:/Users/...'):
# apply Pandas read that seperates data using delimiter = ; into different var names.
incomeStatementData=pd.read_csv(myLocalPath+'us-income-annual.csv',
delimiter=';')
balanceSheetData=pd.read_csv(myLocalPath+'us-balance-annual.csv',
delimiter=';')
CashflowData=pd.read_csv(myLocalPath+'us-cashflow-annual.csv',
delimiter=';')
# print information on the shapes of the data
print('Income Statement CSV data is(rows, columns): ',
incomeStatementData.shape)
print('Balance Sheet CSV data is: ',
balanceSheetData.shape)
print('Cash Flow CSV data is: ' ,
CashflowData.shape)
# Merge the data together... merge the first two data together with the specific column names using on= and assign to 'result'
result = pd.merge(incomeStatementData, balanceSheetData,\
on=['Ticker','SimFinId','Currency',
'Fiscal Year','Report Date','Publish Date'])
# update 'result' with merge with the third data on the same column names as before
result = pd.merge(result, CashflowData,\
on=['Ticker','SimFinId','Currency',
'Fiscal Year','Report Date','Publish Date'])
print('Merged X data matrix shape is: ', result.shape)
return result
X = getXDataMerged()
X.to_csv("Annual_Stock_Price_Fundamentals.csv")
输出:
Income Statement CSV data is(rows, columns): (17213, 28)
Balance Sheet CSV data is: (17213, 30)
Cash Flow CSV data is: (17213, 28)
Merged X data matrix shape is: (17213, 74)
评论