【问题标题】:Use .csv file name in python for-loop在 python for-loop 中使用 .csv 文件名
【发布时间】:2017-07-14 22:28:36
【问题描述】:

我有一些代码需要一堆 csv 文件并使用数据制作单独的图。我能够获得有关代码的帮助(请参见此处:Automate making multiple plots in python using several .csv files),但现在我想对其进行更改,以便将代码中的 name 替换为 files 向量中的文件名。由于某些原因,这在代码的最后一行 plt.savefig('{}.png'.format(fn)) 中有效,但在其他任何地方都没有。

import pandas as pd
from dateutil import parser, rrule
from datetime import datetime, time, date
import time
import os
import matplotlib.pyplot as plt

files = ['a.pd.csv',
    't.pd.csv',
    'r.pd.csv',
    'n.pd.csv',
    'm.pd.csv',
    'k.pod.csv']

for f in files:
    fn = f.split('.')[0]
    dat = pd.read_csv(f)
    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("name_1.csv", na_rep="0")  # write to csv

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

    # parse date
    df3 = pd.read_csv("name_2.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('Name Rain 2015-2016', fontsize=20) #changename
    plt.xlabel('DOY', fontsize=18)
    plt.ylabel('Rain / mm', fontsize=16)

    plt.savefig('{}.png'.format(fn))

【问题讨论】:

  • 具体是哪几行?你是说suptitle()吗?如果是这样的话,plt.suptitle('Name: {}'.format(fn), fontsize=20) 这样的东西会起作用。
  • 是的!那行得通。。谢谢。不过还有一个问题.. 你知道如何使我在 {brackets} 中替换的文本中的第一个字母大写吗?
  • fn 更改为 fn.title ()
  • 嗯。这对我不起作用...您也可以检查我的其他问题:stackoverflow.com/questions/42444020/…
  • 要将图表标题更改为以大写字母开头,我的意思是您可以使用plt.suptitle('Name: {}'.format(fn.title()), fontsize=20)

标签: python csv pandas matplotlib namespaces


【解决方案1】:

修复了我自己的问题:df2.to_csv('{}_2.csv'.format(fn), na_rep="0", header=None) # write to csv

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    相关资源
    最近更新 更多