for i in range(1, 15): filename = 'E:/应统案例大赛/附件1-股票交易数据/a{}.xlsx'.format(i) df = pd.read_excel(filename) df_desc = df.describe() sheet_name = 'a{}'.format(i+1) df_desc.to_excel('E:/应统案例大赛/附件1-股票交易数据/miaoshu{}.xlsx', sheet_name=sheet_name) 修改代码,使每个描述统计分别进入一个sheet
时间: 2024-02-24 13:55:18 浏览: 140
你可以在 `df_desc.to_excel()` 方法中指定 `sheet_name` 参数,来指定每个描述统计分别进入一个sheet。下面是修改后的代码:
```python
import pandas as pd
for i in range(1, 15):
filename = 'E:/应统案例大赛/附件1-股票交易数据/a{}.xlsx'.format(i)
df = pd.read_excel(filename)
df_desc = df.describe()
sheet_name = 'a{}'.format(i+1)
writer = pd.ExcelWriter('E:/应统案例大赛/附件1-股票交易数据/miaoshu{}.xlsx'.format(i))
df_desc.to_excel(writer, sheet_name=sheet_name)
writer.save()
```
这里使用了 `pd.ExcelWriter()` 方法创建一个 ExcelWriter 对象,然后在 `df_desc.to_excel()` 方法中指定这个对象和 `sheet_name` 参数,最后调用 `writer.save()` 方法保存文件。这样每个描述统计就会分别进入一个 sheet 中。
相关问题
# 循环调用绘图函数 for i in range(1, 15): filename = f'E:/应统案例大赛/附件1-股票交易数据/a{i}.xlsx' # 根据数据文件名字生成文件路径 df = pd.read_excel(filename) # 读取数据 plot_k_line(df) # 绘制K线图 plt.savefig('E:/应统案例大赛/附件1-股票交易数据/a{i}.jpg') plt.show() # 显示图表 为什么只保存了一个图片
你的代码中使用了 f-string 来构造文件名,但是你在调用 `plt.savefig()` 函数时,文件名中的 f-string 没有被正确地格式化,因为你使用了单引号字符串而不是 f-string。你可以将单引号替换为双引号来解决这个问题,例如:
```
plt.savefig(f"E:/应统案例大赛/附件1-股票交易数据/a{i}.jpg")
```
这将确保文件名中的 f-string 被正确地格式化。如果你仍然只保存了一个图片,可能是由于你的代码中存在其他问题。你可以在循环中打印出每个数据框的名称和保存的文件名,以便进行调试。例如:
```
for i in range(1, 15):
filename = f'E:/应统案例大赛/附件1-股票交易数据/a{i}.xlsx'
df = pd.read_excel(filename)
print(f"Processing file {filename}...")
plot_k_line(df)
plt.savefig(f'E:/应统案例大赛/附件1-股票交易数据/a{i}.jpg')
plt.show()
```
这将在每次循环中打印出正在处理的文件名,以便你查看是否正确地处理了所有文件。
from PIL import Image, ImageDraw # 创建一个空白图像,用于拼接K线图 canvas_width = 5000 # 大图的宽度 canvas_height = 5000 # 大图的高度 canvas = Image.new('RGB', (canvas_width, canvas_height), 'white') # 读取并拼接K线图 x_offset = 0 # 当前拼接位置的横坐标 for i in range(1, 15): filename = f'E:/应统案例大赛/附件1-股票交易数据/a{i}.jpg' image = Image.open(filename) # 将当前K线图拼接到大图中 canvas.paste(image, (x_offset, 0)) # 更新下一个K线图的横坐标 x_offset += image.width # 保存大图 canvas.save('all_stocks.png')调整代码,使14张图分布均匀
如果您想要让14张K线图在大图中分布均匀,可以通过以下方式来调整代码:
```
from PIL import Image, ImageDraw
# 创建一个空白图像,用于拼接K线图
canvas_width = 5000 # 大图的宽度
canvas_height = 5000 # 大图的高度
canvas = Image.new('RGB', (canvas_width, canvas_height), 'white')
# 读取并拼接K线图
x_offset = 0 # 当前拼接位置的横坐标
y_offset = 0 # 当前拼接位置的纵坐标
max_height = 0 # 当前行中最高的K线图高度
for i in range(1, 15):
filename = f'E:/应统案例大赛/附件1-股票交易数据/a{i}.jpg'
image = Image.open(filename)
# 如果当前行已经没有足够的宽度容纳下一个K线图,就换行
if x_offset + image.width > canvas_width:
x_offset = 0
y_offset += max_height
max_height = 0
# 计算拼接位置,并将当前K线图拼接到大图中
x = x_offset
y = y_offset
canvas.paste(image, (x, y))
# 更新下一个K线图的横坐标、纵坐标和最高高度
x_offset += image.width
max_height = max(max_height, image.height)
# 保存大图
canvas.save('all_stocks.png')
```
在这个示例代码中,我们首先创建一个5000 x 5000的空白图像,用于拼接K线图。然后,我们循环读取14张图片,并根据它们的宽度和高度,计算拼接位置。如果当前行已经没有足够的宽度容纳下一个K线图,就换行;否则就将当前K线图拼接到当前行的末尾。在拼接K线图的过程中,我们还记录了当前行中最高的K线图高度,以便在下一行中对齐。最后,我们使用`Image.save`函数保存大图为一个文件。
希望这个示例代码可以帮助您实现将14张K线图在大图中分布均匀的效果。如果您需要进一步调整图像的布局和分布,可以根据需要修改代码中的参数。
阅读全文