如何从列表中取出项目名称并在循环中使用它
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 的下一个名称。
有人可以告诉我如何实现吗?
df_compressed_list
的元素是 字符串 , 不是 数据帧。
- 因此,
for i in df_compressed_list:
中的 i
作为列表的一个元素( 不是 df_compressed_list
的索引!),是一个字符串。
- 然后,
df_compressed_list[i]
尝试用这个字符串索引列表。
- 这是一个错误,因为“列表索引必须是整数或切片,而不是 str”。
您可以通过将 for i in df_compressed_list:
替换为 for i, _ in enumerate(df_compressed_list):
来解决此问题,但这样会出现更多错误:
df_compressed_list
的元素是 字符串 , 不是 数据帧。
- 因此,
df_compressed_list[i]
将是一个 字符串。
- 因此,
df_compressed_list[i]['time']
将尝试用另一个字符串 'time'
. 索引该字符串
- 这也是一个错误,因为
string indices must be integers
,而不是 str
ings。
我仍然不确定您是否想要完成,但我认为这可能对您有所帮助。也许你可以只接受这个概念并重写它以适应你的问题。
我创建了两个 pandas 数据帧 df1
和 df2
这些也可以从 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 以获取有关使用文件名和路径的更多信息。
我有两个列表,我想从列表中获取项目名称并将其用于循环。我想从 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 的下一个名称。 有人可以告诉我如何实现吗?
df_compressed_list
的元素是 字符串 , 不是 数据帧。- 因此,
for i in df_compressed_list:
中的i
作为列表的一个元素( 不是df_compressed_list
的索引!),是一个字符串。 - 然后,
df_compressed_list[i]
尝试用这个字符串索引列表。 - 这是一个错误,因为“列表索引必须是整数或切片,而不是 str”。
您可以通过将 for i in df_compressed_list:
替换为 for i, _ in enumerate(df_compressed_list):
来解决此问题,但这样会出现更多错误:
df_compressed_list
的元素是 字符串 , 不是 数据帧。- 因此,
df_compressed_list[i]
将是一个 字符串。 - 因此,
df_compressed_list[i]['time']
将尝试用另一个字符串'time'
. 索引该字符串
- 这也是一个错误,因为
string indices must be integers
,而不是str
ings。
我仍然不确定您是否想要完成,但我认为这可能对您有所帮助。也许你可以只接受这个概念并重写它以适应你的问题。
我创建了两个 pandas 数据帧 df1
和 df2
这些也可以从 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 以获取有关使用文件名和路径的更多信息。