簡體   English   中英

R中的.csv數據操作而不是python

[英].csv data manipulation in R rather than python

我有一個簡單的.csv格式數據,需要先進行操作才能創建符合此數據的繪圖。 但是,我理解如何從python中操作.csv格式數據。 我想在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代碼,任何人都可以引導我進入正確的方向:

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

    }

在R中調整python代碼意味着放棄循環以支持向量化操作。 在這里,我們可以根據命名向量創建meas,然后計算金額:

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

你嘗試過使用pandas.read_csv嗎? 或者csv文件是如此不規則,你不能使用pandas的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部分。

您可以通過執行類似的操作直接從master_df繪圖

master_df.plot()

你已經有了讀取數據的代碼(read.csv),所以我認為你的主要斗爭是在manimpuation本身嗎?

如果是這樣,你可以繼續使用批量if和for循環,但我認為有更簡單的方法。 就像是:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM