使用多个 .csv 文件在 python 中自动制作多个绘图

Posted

技术标签:

【中文标题】使用多个 .csv 文件在 python 中自动制作多个绘图【英文标题】:Automate making multiple plots in python using several .csv files 【发布时间】:2017-07-14 19:09:42 【问题描述】:

我有 14 个 .csv 文件(每个位置 1 个 .csv 文件)将用于制作 14 个每日降雨量的条形图。以下代码是一个条形图的外观示例。

import numpy as np
import pandas as pd 
from datetime import datetime, time, date
import matplotlib.pyplot as plt

# Import data
dat = pd.read_csv('a.csv')
df0 = dat.loc[:, ['TimeStamp', 'RF']]

# Change time format
df0["time"] = pd.to_datetime(df0["TimeStamp"])
df0["day"] = df0['time'].map(lambda x: x.day)
df0["month"] = df0['time'].map(lambda x: x.month)
df0["year"] = df0['time'].map(lambda x: x.year)
df0.to_csv("a2.csv", na_rep="0")  # write to csv

# Combine for daily rainfall
df1 = pd.read_csv('a2.csv', encoding='latin-1',
              usecols=['day', 'month', 'year', 'RF', 'TimeStamp'])
df2 = df1.groupby(['day', 'month', 'year'], as_index=False).sum()
df2.to_csv("a3.csv", na_rep="0", header=None)  # write to csv

# parse date
df3 = pd.read_csv("a3.csv", header=None, index_col='datetime', 
             parse_dates='datetime': [1,2,3], 
             date_parser=lambda x: pd.datetime.strptime(x, '%d %m %Y'))

def dt_parse(date_string):
dt = pd.datetime.strptime(date_string, '%d %m %Y')
return dt

# sort datetime
df4 = df3.sort()
final = df4.reset_index()

# rename columns
final.columns = ['date', 'bleh', 'rf']

final[['date','rf']].plot()

plt.suptitle('Rain 2015-2016', fontsize=20)
plt.xlabel('Date', fontsize=18)
plt.ylabel('Rain / mm', fontsize=16)
plt.savefig('a.jpg')
plt.show()

最后的情节是这样的:

我怎样才能自动化这段代码(例如,写一个 for 循环?),这样我就不必为每个 .csv 文件重新键入代码?如果代码还将带有 .csv 名称的图形保存为 .jpg 文件的名称,那就太好了。

这14个文件的名称如下: 名称 = ["a.csv","b.csv","c.csv","d.csv","e.csv","f.csv"...]

这是我正在使用的文件类型的示例:https://dl.dropboxusercontent.com/u/45095175/test.csv

【问题讨论】:

【参考方案1】:

第一种方法:你需要把你所有的csv文件放到当前文件夹中。您还需要使用os 模块。

import os
for f in os.listdir('.'):                 # loop through all the files in your current folder
    if f.endswith('.csv'):                # find csv files
        fn, fext = os.path.splitext(f)    # split file name and extension

        dat = pd.read_csv(f)              # import data
        # Run the rest of your code here

        plt.savefig('.jpg'.format(fn))  # name the figure with the same file name 

第二种方法:如果你不想使用os模块,你可以把你的文件名放在这样的列表中:

files = ['a.csv', 'b.csv']

for f in files:
    fn = f.split('.')[0]

    dat = pd.read_csv(f)
    # Run the rest of your code here

    plt.savefig('.jpg'.format(fn))

【讨论】:

我实际上已经这样做了。我的代码第一行是:os.chdir('/Users/me/desktop') @JAG2024 你试过剩下的代码了吗?有用吗? 几乎!我刚刚收到错误消息Traceback (most recent call last): File "run.py", line 57, in <module> plt.savefig('.jpg'.format(fn)) # name the figure with the same file name NameError: name 'fn' is not defined 我复制并粘贴了您的“第一种方法”代码,并将我的代码添加到您所说的 # 在此处运行其余代码。 是否还有一种方法可以在重命名新的 csv 文件时包含 csv 文件的名称(例如,将 df2.to_csv("a3.csv", na_rep="0", header=None) 中的 a3 更改为使用的 csv 文件的名称以及在plt.suptitle('Rain 2015-2016', fontsize=20)?

以上是关于使用多个 .csv 文件在 python 中自动制作多个绘图的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中使用 Pandas 数据结构附加多个 CSV 文件

如何使用 Python Pandas 合并多个 CSV 文件

根据特定列合并多个 CSV 文件 - Python

使用 Python 组合多个 CSV 文件

如何使用python合并文件夹中的多个.csv

如何在这种情况下从多个csv文件读取数据并生成报告?