我有一个有两列的长csv文件。我的第一列有一个表示日期的整数,第二列有另一个表示温度的整数。它的外观如下:
如何通过过滤整数值来添加第二列的值?
例如,添加值20160131< x< 20160301查找2016年2月所有气温的总和。
答案 0 :(得分:0)
以下是使用pandas
的一种方法。您可以将系列转换为datetime
,然后执行groupby
操作。
import pandas as pd
df = pd.DataFrame({'Date': [20160101, 20160102, 20160103, 20171231],
'Value': [30, 32, 45, 28]})
# or to read from csv
df = pd.read_csv('file.csv', header=None, names=['Date', 'Value'])
df['Date'] = pd.to_datetime(df['Date'], format='%Y%m%d')
res = df.set_index('Date').groupby(pd.Grouper(freq='M'))['Value'].sum().dropna()
# Date
# 2016-01-31 107.0
# 2017-12-31 28.0
# Name: Value, dtype: float64
您可能希望删除不在范围内的月份的空值。
此外,您可能希望应用.reset_index()
来返回数据集而不是系列。
答案 1 :(得分:0)
快速又脏,但有效。
import csv
def filter_csv(start_date, end_date, csvfile):
spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
total_temp = 0
for row in spamreader:
values = row[0].split(',')
if start_date <= int(values[0]) <= end_date:
total_temp += int(values[1])
return total_temp
with open('d.csv', newline='') as csvfile:
total_temp = filter_csv(20160101, 20160102, csvfile)
print(total_temp)