如何从列表中取出项目名称并在循环中使用它

How to take item names off a list and use it in a loop

我有两个列表,我想从列表中获取项目名称并将其用于循环。我想从 df_compressed_list 中获取数据框的名称,并用该数据框的两列绘制一个图形,然后将该图形保存到一个文件夹中。它应该采用 plot_image_list 中的图形名称 请看下面的代码。

df_compressed_list= ['df_compressed_1','df_compressed_2','df_compressed_3','df_compressed_4','df_compressed_5','df_compressed_6','df_compressed_7','df_compressed_8','df_compressed_9','df_compressed_10','df_compressed_11','df_compressed_12','df_compressed_13','df_compressed_14']

plot_image_list= ['compressed_1','compressed_2','compressed_3','compressed_4','compressed_5','compressed_6','compressed_7','compressed_8','compressed_9','compressed_10','compressed_11','compressed_12','compressed_13','compressed_14']

for i in df_compressed_list:
    plt.figure(100,figsize=(10,5))
    plt.plot(i['time'], i['voltage'])
    for j in plot_image_list:
        plt.savefig('images\j.PNG')
    plt.close()

['time'] 和 ['voltage'] 是 pandas dataframe.I 已创建的具有各自名称的数据框的列名称。我试过上面的代码,但它不起作用。它显示

TypeError: list indices must be integers or slices, not str

我想让它做的是,它会从列表中一个一个地取出名字,然后把名字放在plt.plot(i['time'], i['voltage']) 所以它看起来像这样

plt.plot(df_compressed_1['time'], df_compressed_1['voltage'])

plt.savefig('images\j.PNG') 这样它看起来像这样

 plt.savefig('images\compressed_1.PNG')

在每次迭代中,它应该采用 df_compressed_list 列表和 plot_image_list 的下一个名称。 有人可以告诉我如何实现吗?

  1. df_compressed_list 的元素是 字符串 不是 数据帧。
  2. 因此,for i in df_compressed_list: 中的 i 作为列表的一个元素( 不是 df_compressed_list 的索引!),是一个字符串。
  3. 然后,df_compressed_list[i] 尝试用这个字符串索引列表。
  4. 这是一个错误,因为“列表索引必须是整数或切片,而不是 str”。

您可以通过将 for i in df_compressed_list: 替换为 for i, _ in enumerate(df_compressed_list): 来解决此问题,但这样会出现更多错误:

  1. df_compressed_list 的元素是 字符串 不是 数据帧。
  2. 因此,df_compressed_list[i] 将是一个 字符串
  3. 因此,df_compressed_list[i]['time'] 将尝试用另一个字符串 'time'.
  4. 索引该字符串
  5. 这也是一个错误,因为 string indices must be integers,而不是 strings。

我仍然不确定您是否想要完成,但我认为这可能对您有所帮助。也许你可以只接受这个概念并重写它以适应你的问题。

我创建了两个 pandas 数据帧 df1df2 这些也可以从 csv 等打开 df1 = pd.read_csv() 然后我把它们放入列表 df_list。 现在我做了一个循环遍历所有 DataFrame,并将 voltage 的图保存在 figs 文件夹中的 time 上。

import pandas as pd
import matplotlib.pyplot as plt

df1 = pd.DataFrame(
    {
        "time": [0, 1, 2, 3, 4, 5],
        "voltage" : [0, 23, 44, 19, 7, 3],
    }
)

df2 = pd.DataFrame(
    {
        "time": [0, 1, 2, 3, 4, 5],
        "voltage" : [0, 200, 404, 200, 190, 150],
    }
)

df_list = [df1, df2]

for df_number in range(len(df_list)):
    fig = plt.figure(100, figsize=(10, 5))
    ax = fig.add_axes([0,0,1,1])
    
    # df_list[index] -> df1 .. df2; df2["voltage"] -> [0, 200, 404, 200, 190, 150]
    ax.plot(df_list[df_number]["time"], df_list[df_number]["voltage"])
    fig.savefig("figs/figure{}.jpg".format(df_number))

必须手动创建 figs 文件夹。查看 pathlib 以获取有关使用文件名和路径的更多信息。