【问题标题】:Python 3 creating variable names from a list and adding a suffixPython 3 从列表中创建变量名并添加后缀
【发布时间】:2021-10-02 17:30:56
【问题描述】:

我想使用列表中的名称创建一个 pandas 数据框,然后将“_df”附加到它的末尾,但我似乎有两个问题。下面是我的代码。

read_csv = ['apple', 'orange', 'bananna']

for f in read_csv:
    print('DEBUG 7: Value of f inside the loop: ', f)
    ##!!! ERROR HERE - We have reassigned the csv file to f
    ##!!! ERROR HERE - f now contains contents of f.csv(e.g. apple.csv)
    f = pd.read_csv(f + '.csv')
    ##!!! ERROR HERE - Fix above error and the spice shall flow.
    #print('DEBUG 8: Inside read_csv \n', f)

for 循环运行并读取我的列表“apple”中的第一项并将其分配给 f。 我们进入循环。第一个打印语句 DEBUG 7 将 f 的值返回为“apple”。到目前为止一切顺利。

接下来,我们继续运行 pd.read_csv,这是我的第一个问题。如何将'_df'附加到f?我在这里阅读了一些答案并尝试了它们,但它没有像我预期的那样工作。我想让循环运行并为 apple_df、orange_df 和 bananna_df 创建一个新的数据框。但我们可以回到这一点。

我在这里遇到的第二个错误是“ValueError:错误的项目数传递了 8,位置意味着 1”CSV 文件有 8 列,并且被分配给 f 而不是数据框名称。 我这辈子都无法弄清楚发生了什么来实现这一点。嗯,我可以。如果我修复了 apple_df 问题,我相信数据框会很好地读取 csv 文件。

仍在学习,因此感谢所有帮助。

谢谢

汤姆

【问题讨论】:

    标签: python-3.x pandas for-loop


    【解决方案1】:

    ValueError: 传递的项目数错误 8,位置暗示 1

    您收到该错误是因为您无法将 DataFrame 分配给 f 变量,该变量是该循环中的字符串。您必须将其存储到新变量中,例如 df

    df = pd.read_csv(f + '.csv')
    

    如果你想通过f"_df"创建新变量,你需要使用exec

    exec(f + "_df" + " = pd.read_csv(f + '.csv')")
    

    【讨论】:

    • 这有效,但给我选择的答案类似的错误。我没有处理名称中的句号。例如 appl.e
    【解决方案2】:

    使用locals() 创建局部变量(apple_df、orange_df、...)

    read_csv = ['apple', 'orange', 'bananna']
    
    for f in read_csv:
        locals()[f"{f}_df"] = pd.read_csv(f"{f}.csv")
    
    >>> type(apple_df)
    pandas.core.frame.DataFrame
    

    【讨论】:

    • 嗨。我喜欢这种方法。 2个问题。您如何处理名称为“apple”的列表项变成了 appl.e_df,然后将抛出错误Traceback (most recent call last): File "<input>", line 1, in <module> NameError: name 'dark' is not defined 第二个问题:如何引用我的新自动生成的数据框名称。 -f['Returns'] = (f['Close'] - f['Open']) / f['Open'] ?
    • 你的变量名需要是一个有效的python标识符,否则使用字典来存储你的数据框,每个键都是你的数据框的名称。
    猜你喜欢
    • 2021-04-05
    • 2020-02-13
    • 2023-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-05
    相关资源
    最近更新 更多