为路径输入调用pandas plot函数

时间:2017-12-17 09:23:02

标签: python pandas matplotlib plot

我有一个pandas数据框,用于保存.wav数据的文件路径。我可以使用pandas DataFrame.plot()函数绘制引用的数据吗?

示例:

典型用法: df.plot()

我正在尝试做什么: df.plot(df.path_to_data) ...

我怀疑applylambda的某些组合可以解决问题,但我对这些工具并不是很熟悉。

2 个答案:

答案 0 :(得分:1)

不,那是不可能的。 plot是对pd.DataFrame个对象进行操作的一阶函数。在这里,df将是同一件事。您需要做的是

  1. 使用pd.read_*加载您的数据框(通常为pd.read_csv(file))并分配给df
  2. 现在致电df.plot
  3. 因此,总而言之,您需要 -

    df = pd.read_csv(filename)
    ... # some processing here (if needed)
    df.plot()
    

    关于是否可以这样做的问题"没有在内存中加载数据" ...你不能绘制内存中不存在的数据。如果您愿意,可以limit tha number of rows you readloading it in chunks高效加载。{3}}。您还可以将代码编写到aggregate/summarise datasample it

答案 1 :(得分:1)

我认为您需要先read_csv然后DataFrame.plot创建DataFrame

pd.read_csv('path_to_data').plot()

但是,如果需要从DataFrame中的pathDataFrame创建df.path_to_data.apply(lambda x: pd.read_csv(x).plot()) :{/ 1}}

def f(x):
    pd.read_csv(x).plot()

df.path_to_data.apply(f)

或使用自定义功能:

for x in df.path_to_data:
    pd.read_csv(x).plot()

或使用循环:

function post(){
    unirest.post('https://power.ivyiot.com/Thingworx/Things/GamaNetworkServices/Services/GetNetworkData')
    .headers({'Accept': 'application/json', 'appKey': 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'})
    .end(function (response) {
      setInterval(writeToCsv(response.body.rows),60000);
    });
}

function writeToCsv(outCSV){
    var k = 0;
  return function(){
    if(k > outCsv.length){
    // TODO: stop interval, since no more rows to consume
    }
    var items = [[outCSV[k].PowerPlant , outCSV[k].gen1min , outCSV[k].gen1minDateTime, timeConverter(outCSV[k].gen1minDateTime)]];
             for (index = 0; index < items.length; ++index) {
                csv.push(items[index].join(', ') + '\n');
             }

              fs.writeFile(outFilename, csv, function (err) {
                if (err) {
                    return console.log(err);
                }

                console.log("Added one row!")

             });
             k++;
  }
}

function timeConverter(UNIX_timestamp){
             var a = new Date(UNIX_timestamp*1000);
             var hour = a.getUTCHours();
             var min = a.getUTCMinutes();
             var sec = a.getUTCSeconds();
             var time = hour+':'+min+':'+sec ;
             return time;
}

post();