AttributeError:“ DataFrame”对象没有属性“ path”

时间:2020-10-12 19:22:53

标签: python pandas dataframe

我正在尝试逐步建立财务报表数据库。第一步围绕从SEC的EDGAR数据库收集10-K。我有用于通过CIK号和登录号提取相关的8-K,10-K和10-Q的代码,并检索相关的Excel电子表格。现在,下面的代码集中于尝试在目录中创建一个文件夹,然后使用CIK代码命名该文件夹,然后从EDGAR数据库中提取电子表格,然后将电子表格保存到具有CIK代码的文件夹中。我的示例是一个名为“ accessionnumtest.csv”的csv文件,其标题为:

公司名称,报告类型,cik,日期,cik_accession

和数据:

4Less Group,Inc.,10K / A,1438901,11 / 27/2019,edgar / data / 1438901 / 000121390019024801.txt

AB INTERNATIONAL GROUP CORP。,10K,1605331,10 / 22/2019,edgar / data / 1605331 / 000166357719000384.txt

ABM INDUSTRIES INC /DE/,10K,771497,12/20/2019,edgar/data/771497/000162828019015259.txt

ACTUANT CORP,10K,6955,10 / 29/2019,edgar / data / 6955 / 000000695519000033.txt

我的代码在下面

import os
import pandas as pd

path = os.getcwd()

folder_path = "C:/metricdatadb/"

df = pd.read_csv("accessionnumtest.csv")

folder_name = df['cik']
print(folder_name)

for row in df.iterrows():
    dir = df.path.join(folder_path, folder_name)
    os.makedirs(dir)

这段代码给了我AttributeError:'DataFrame'对象没有属性'path'错误。我已重命名路径,并在标题中检查了空格。任何建议表示赞赏。

2 个答案:

答案 0 :(得分:0)

关于错误:os.path.join。不是pd.path.join。您正在调用错误的模块。

也就是说,无论错误如何,您的代码都不会执行您要尝试执行的操作。 folder_name不会为每一行更新。您可以执行row.cik来获取每个iterrows()

的值
dir = os.path.join(folder_path, row.cik)

答案 1 :(得分:0)

相对不清楚您要完成什么工作,尤其是使用.csv文件和Pandas。您所拥有的代码中似乎存在很多奇怪的错误,我认为可以通过尝试一些像网络抓取之类的困难之前重新学习一些更简单的Python概念来改善这些错误。请注意,我并不是要放弃,而不是要建立基本原则是此类项目的必要步骤。

也就是说,如果我正确理解了您的意图,则希望为多个CIK创建10-K,10-Q等文件的文件层次结构。

不需要使用.csv文件或熊猫。

最简单的方法可能是在下载它们的同一步骤中完成。

为此的伪代码如下:

for cik in list_of_ciks:
     first_file = find_first_file_online();

     if first_file is 10-K:
          save_to_10-K folder for CIK
     if first_file is 10-Q:
          save_to_10-Q folder for CIK

如上所述,您可以跳过.csv文件(此外,请注意CSV代表“逗号分隔值”。数据中的某些条目包含逗号,例如“ 4Less Group,Inc.”。与CSV文件不兼容,因为它将单个条目分为逗号两列,将所有数据移到一列。

在处理数据时,您将要随身建立文件夹。

当您遍历新的CIK时,请为该CIK创建主文件夹。遇到10-K时,请为10-K创建一个文件夹,并用一个唯一的名称保存。由于您需要使用登录号来获取excel表格,因此遵循这并不是一个不好的命名约定。

会是这样的:

import requests
import pathlib

cik_list = [cik_1, cik_2... cik_n]

for cik in cik_list:
     file = requests.get("cik/accession/Report.xlsx").data

     with open(pathlib.Path(cik, report_type, accession_number + ".xlsx", "wb")) as excel_file:
     excel_file.write(file.data)

上面的代码肯定不会运行,并且不包含使它起作用所需的一切,因为该信息是您编写的。将上述概念集成到您的代码中就可以了。

要重申,您需要CIK,登录号和报告类型。要将文件保存在文件夹中,只需按需创建文件夹即可,格式为“ CIK / report_type / accession.xlsx”