Python:逐个读取文件夹中的Csv文件并将输出保存为png文件

r7s23pms  于 2023-03-27  发布在  Python
关注(0)|答案(3)|浏览(218)

我有一个包含50个csv文件的文件夹,如countrieslist1.csv,countrieslist2.csv,countrieslist3.csv等。我有一个代码,可以使用pandas从csv文件中读取值并从数据中绘制所需的图形。我想要的是我的代码应该采用第一个csv文件,做绘图,并将其保存为png文件,然后它应该采取第二个csv文件做同样的事情,像这样的每一个csv文件,使在年底我应该有50 png文件(一个为每个csv文件)
我试过了

import pandas as pd
import os
import matplotlib.pyplot as plt

folder_path = "C:/Users/xyz/Desktop/Countrieslist"
df=pd.read_csv(folder_path)

X=df.'columnname'.value_counts.(normalize=True).head(5)
X.plot.barh()
plt.ylabel()
plt.xlabel()
plt.title()
plt.savefig(folder_path[:-3]+'png')

这给出了输出,但它只为一个单一的csv文件。但我想要一个代码,应该采取所有的csv文件一个接一个,做绘图,并将其保存为png文件。我怎么才能做到这一点?

jhiyze9q

jhiyze9q1#

您可以使用以下代码:

import pandas as pd
import pathlib
import matplotlib.pyplot as plt

folder_path = pathlib.Path("C:/Users/xyz/Desktop/Countrieslist")

def create_image(filename, columnname):
    df = pd.read_csv(filename)
    ax = (df[columnname].value_counts(normalize=True).head(5)
                        .plot.bar(ylabel='Count', xlabel='Country',
                                  title='Value counts',
                                  legend=False, rot=0))
    plt.savefig(folder_path / f'{filename.stem}.png')
    
for filename in folder_path.glob('*.csv'):
    create_image(filename, 'Country')

countrieslist5.png

countrieslist8.png

输入数据:

REGIONS = ['AL', 'AT', 'BE', 'BG', 'CH', 'CZ', 'DE', 'DK',
           'EE', 'ES', 'FI', 'FR', 'GR', 'HR', 'HU', 'IE',
           'IT', 'LT', 'LU', 'LV', 'ME', 'NL', 'NO', 'PL',
           'PT', 'RO', 'RS', 'SE', 'SI', 'SK', 'UK']

for i in range(1, 10):
    df = pd.DataFrame({'Country': np.random.choice(REGIONS, 200)})
    df.to_csv(f'Countrieslist/countrieslist{i}.csv', index=False)
new9mtju

new9mtju2#

由于已经导入了os,因此可以使用os中的listdir函数
您可以使用以下代码迭代目录的内容,如果文件不是csv文件,则继续迭代

for file in os.listdir(folder):
    if not file.endswith('.csv'): continue

    df=pd.read_csv(file)
    # continue with other code here
sshcrbum

sshcrbum3#

先入先得.csv文件:

import glob, os

csv_files = []
os.chdir("C:/Users/xyz/Desktop/Countrieslist")
for file in glob.glob("*.csv"):
    csv_files.append(file)

下一步是在循环中施展你的魔法:

for file in csv_files:
    df=pd.read_csv(file)

    X=df.'columnname'.value_counts.(normalize=True).head(5)
    X.plot.barh()
    plt.ylabel()
    plt.xlabel()
    plt.title()
    plt.savefig(file+'.png')

相关问题