2016-12-13 10 views
3

私はこのデータにプロットアコードを作成するには、最初に操作する必要のある単純な.csv形式のデータがあります。しかし、私はどのように.csv形式のデータをPythonから操作するかを理解しています。私はRで同じロジックを適用したいが、私はこれを行う方法がわからない。.csvデータの操作はPythonではなくRで行います

以下は、.csvファイルのデータの例ですが、Rに読み込まれます。私はこの問題について議論するためのコードを作成しました。

df <- data.frame(Name = c("AC", "AC", "PT", "PT", "OR", "OR"), 
    useless_column = c("","","A",3,4," "), 
    measurement = c("H", "", "K", "M", "", "H"), 
    amount = c(12, 54, 20, 87, 75, 22), 
    useless_column = c("","","A",3,4," ")) 

Pythonでは、私は一般的にこれを行います。

import csv 
import os 
import glob 
import sys 
fileList = glob.glob("R:xxxxxxxxxxxxxxxxxxxxx\*.csv") 
for inputFile in fileList: 
     outputFilename = inputFile + "output.csv" 
     csvInput = csv.reader(open(inputFile,'r'),delimiter=",") 
     outputFile = open(outputFilename,'w') 
     outputFile.write("Name,measurement,amount\n") 
     csvInput.next() 
     for line in csvInput: 
      if line[2] == "H": 
       meas = "100" 
      elif line[2] == "K": 
       meas = "1000" 
      elif line[2] == "M": 
       meas = "1000000" 
      else: 
       meas = "1" 
      amount = int(meas) * line[3] 

      outputFile.write(",".join(line[0],line[2],amount+"\n"])) 
outputFile.close() 

Pythonでは、私は、CSVファイルから各行の識別するために、forループを使用して、その後、CSVを読み込むことができます。その後、分析を続ける前に私の出力ファイルを調整しました。上記から、私の出力は以下のようになり、コードはRフォーマットになります:

df <- data.frame(Name = c("AC", "AC", "PT", "PT", "OR", "OR"), 
    measurment = c("H", "", "K", "M", "", "H"), 
    amount = c(1200, 54, 20000, 87000000, 75, 2200)) 

私はRでこれを行うことを知っていますか?私は正しい方向に私を導くことができるRとpleseは誰の小さなコードを持っている:Rで

x <- read.csv("xxxx.csv", header=T,sep=",") 
xC = ncol(x) 
xR = nrow(x) 
op = data.frame(matrix(data = x, nrow= xR, ncol=3,byrow=T)) 
for (x in :xC) 
{ 
    for (r in 1:xR) 
    { 
    xxxxxxxx 

    } 

答えて

6

適応Pythonのコードはベクトル化操作を支持してループをあきらめることを意味します。ここでは、名前のベクトルに基づいて、体の測定を作成し、量を計算することができます。

# dictionnary of measurement values: 
m <- c(H = 100, K = 1000, M = 1000000) 

# create meas based on measurement 
df$meas <- m[df$measurment] 
df$meas[is.na(df$meas)] <- 1 
# compute amount 
df$amount <- df$meas * df$amount 

データ

df <- data.frame(Name = c("AC", "AC", "PT", "PT", "OR", "OR"), 
       measurment = c("H", "", "K", "M", "", "H"), 
       amount = c(1200, 54, 20000, 87000000, 75, 2200)) 
0

あなたがpandas.read_csvを使用してみましたか?または、csvファイルが不規則であるため、パンダのread_csvメソッドを使用することができません。

各ファイルのデータを操作するためにforループを実行し、それをマスターDataFrameに追加することができます。

例:

import pandas as pd 

PATH = '/home/data/' # Example path 

master_df = pd.DataFrame() 
for inputFile in fileList: 
    csv_file = pd.read_csv(path + inputFile, sep=',') 
    H_index = csv_file[csv_file.loc[:, 2] == 'H'].index 
    csv_file.loc[H_index, 3] = csv_file.loc[H_index, 3] * 100 
    master_df = master_df.append(csv_file) 

私は、操作のKM部分をスキップしました。

(read.csv)ので、私は右の思考にあなたの主な闘争である午前あなたは直接

master_df.plot() 
0

ような何かを行うことによってmaster_dfからプロットすることができますが、データを読み込むためのコードを持っています感動そのもの?

もしそうなら、がループの場合はループを使用し続けますが、もっと簡単な方法があると思います。次のようなもの:

df <- read.csv("xxxx.csv", header=T,sep=",") 
df$meas <- df$measurement # Create a new column called 'meas' by copying column 'measurement' 
df$meas[df$meas == "H"] <- 100 # Replace H's with 100 
df$meas[df$meas == "K"] <- 1000 
df$meas[df$meas == "M"] <- 1000000 
df$value <- df$meas * df$amount 
関連する問題