我的CSV输入如下:
Name hours Date
User1 2,5 01.01.2017
User1 5 02.01.2017
...
User1 3,5 31.01.2017
现在我想要一个像这样的输出:
Total:
User1 11 01-31.01.2017
但我明白了
2,553,5
我不能说为什么我测试了这么多例子,但总是输出相同的。
print(df["hours"].sum())
答案 0 :(得分:2)
您可以先在read_csv
中使用decimal=","
参数删除浮点数中的,
。
cols = ['Name','Sum', 'Dates']
a = pd.DataFrame([[df["Name"].iat[0],
df["hours"].sum(),
df["Date"].min().strftime('%d.%m.%Y') + '-' +
df["Date"].max().strftime('%d.%m.%Y')]], columns=cols)
print (a)
Name Sum Dates
0 User1 11.0 01.01.2017-01.02.2017
答案 1 :(得分:0)
你的小数是使用逗号','的原因。
hours
2,5
5
3,5
当我尝试时,我得到了和你一样的答案。将其更改为十进制,即点'。'。喜欢这个
hours
2.5
5
3.5
瞧!你得到了答案。
以下是工作示例。
import pandas as pd
info = {'User':['User1','User1','User1'],
'Value':[3.5,2.5,5],
'Date':['01.01.2017','03.01.2017','02.01.2017']}
df = pd.DataFrame(info)
print(df['Value'].sum())
答案 2 :(得分:0)
首先将hours
列转换为float64的dtype。这可以通过以下方式完成:
import pandas as pd
import numpy as np
df['hours'] = df.hours.apply(lambda x: x.replace(',', '.')).astype(np.float64)
接下来,您可以使用函数返回所需的df行。
def totals_by_user(df, username):
# Sort by username
df = df.loc[df.Name == username]
# Get the total hours
tot_hours = df.hours.sum()
# Finds the date range in your format
df = df.sort('Date')
date_range = df.Date.min().split('.')[0] + '-' + df.Date.max()
return pd.DataFrame([username, tot_hours, date_range], columns = ['Name', 'Sum', 'Date'])
答案 3 :(得分:-1)
试试这个: 所以你可以总结一下例如第二行的小时
with open("nameofyourfile.csv") as fin:
total = 0
for row in csv.reader(fin):
total += int(row[0]) # this will sum the first row
print(total)