2017-02-24 10 views
0

14のCSVファイル(場所ごとに1つの.csvファイル)があり、毎日の降水量の14バープロットになります。次のコードは、1つの棒グラフがどのように表示されるかの例です。いくつかの.csvファイルを使用して複数のプロットをPythonで自動作成

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() 

そして、最終的なグラフは次のようになります。私はこのコードを自動化することができますどのように enter image description here

を(つまりは、書き込み用のループ多分?)私は、コードを再入力する必要はありませんように.csvファイルごとに?コードが.jpgファイルの名前として.csvの名前を付けて保存するといいでしょう。

14ファイルの名前は次のとおりです。 names = ["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)) 
+0

私は実際にすでにこれを行います。私のコードの最初の行は 'os.chdir( '/ Users/me/desktop')' – JAG2024

+0

@ JAG2024です。残りのコードを試しましたか?それは動作しますか? –

+0

ほぼ!私はちょうどエラーメッセージ 'Traceback(最新の最後の呼び出し): ファイル" run.py "、行57、 plt.savefig( 'jpg'.format(fn)同じファイル名 NameError:名前 'fn'が定義されていません。 – JAG2024

関連する問題