2016-12-13 1 views
3

보다 내가 할 수 플롯이 데이터에 부여 생성하기 전에 먼저 조작 할 필요가 간단한 .CSV 형식의 데이터가 있습니다. 그러나 파이썬에서 .csv 형식 데이터를 조작하는 방법을 알고 있습니다. R에 같은 로직을 적용하고 싶지만 어떻게해야할지 모르겠다. 다음은 .CSV 데이터 조작 오히려 파이썬

은 .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," ")) 

파이썬에서, 나는 일반적으로이 작업을 수행합니다

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

파이썬에서, 나는 csv 파일에서 각 라인의 식별 루프 사용 후 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

적응 파이썬 코드는 벡터화 된 작업 대신 루프를 포기하는 것을 의미한다. 여기, 우리는 명명 된 벡터에 따라 신체의 체중 측정을 만든 다음 금액을 계산 :

# 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 방법을 판다를 사용할 수 없을 정도로 불규칙?

는 각 파일에서 데이터를 조작하는 루프를 수행 한 후 마스터 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