我正在处理一个包含三列和三行包含数字数据的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()
谢谢!
答案 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文件的首选方法。看看这里:
话虽如此,您可以稍微修改代码的开头:
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)