如何在CSV文件的一个值上执行数学运算?

时间:2015-10-08 16:08:40

标签: python csv math

我正在处理一个包含三列和三行包含数字数据的csv文件。 csv数据文件如下所示:

 Colum1,Colum2,Colum3
 1,2,3
 1,2,3
 1,2,3  

我的问题是如何编写一个python代码,该代码采用其中一个列的单个值并执行特定操作。例如,假设我想在' Colum1'中取第一个值。并从列中所有值的总和中减去它。

这是我的尝试:

import csv
f = open('columns.csv')
rows = csv.DictReader(f)

value_of_single_row = 0.0
for i in rows:
    value_of_single_Row += float(i) # trying to isolate a single value here!
print value_of_single_row - sum(float(r['Colum1']) for r in rows) 
f.close()

谢谢!

3 个答案:

答案 0 :(得分:1)

您可以使用pandas

完成所有这些操作
from pandas import DataFrame, read_csv
import matplotlib.pyplot as plt
import pandas as pd
import sys
import os


Location = r'path/test.csv'
df = pd.read_csv(Location, names=['Colum1','Colum2','Colum3'])
df = df[1:] #Remove the headers since they're unnecessary
print df

df.xs(1)['Colum1']=int(df.loc[1,'Colum1'])+5
print df

您可以使用df.to_csv('File path', index=False,header=True)回复您的csv。headers=True将重新添加标题。 为了更好地完成这项工作,你可以像这样做

import csv

Location = r'C:/Users/tnabrelsfo/Documents/Programs/Stack/test.csv'
data = []
with open(Location, 'r') as f:
    for line in f:
        data.append(line.replace('\n','').replace(' ','').split(','))
    data = data[1:]
    print data
    data[1][1] = 5
    print data

它将在每一行中读取,删除列名称,然后您可以按索引

修改值

答案 1 :(得分:1)

根据您提供的代码,我建议您查看文档,了解如何阅读csv文件的首选方法。看看这里:

How to use CsvReader

话虽如此,您可以稍微修改代码的开头:

import csv

with open('data.csv', 'rb') as f:
    rows = csv.DictReader(f)
    for row in rows:
        # perform operation per row

从那里你可以访问每一行。

这应该可以为您提供正确的逐行操作所需的功能。

我建议你做的就是打印出你的行,看看你的数据是什么样的。您将看到输出的每一行都是字典。

所以,如果你要经历每一行,你可以简单地做这样的事情:

for row in rows:
  row['Colum1'] # or row.get('Colum1')
  # to do some math to add everything in Column1
  s += float(row['Column1'])

所以这一切看起来都像这样:

import csv

s = 0
with open('data.csv', 'rb') as f:
    rows = csv.DictReader(f)

    for row in rows:
        s += float(row['Colum1'])

答案 2 :(得分:0)

所以这是我使用pandas库的简单解决方案。假设我们有sample.csv个文件

import pandas as pd
df = pd.read_csv('sample.csv') # df is now a DataFrame
df['Colum1'] = df['Colum1'] - df['Colum1'].sum() # here we replace the column by subtracting sum of value in the column
print df
df.to_csv('sample.csv', index=False) # save dataframe back to csv file

您还可以使用map函数对一列进行操作,例如

import pandas as pd
df = pd.read_csv('sample.csv')
col_sum = df['Colum1'].sum() # sum of the first column
df['Colum1'] = df['Colum1'].map(lambda x: x - col_sum)