使用 Python 从 CSV 文件中查找每一列的平均值?
Finding average of every column from CSV file using Python?
我有一个 CSV 文件,它有几列和几行。请看上图。图片中只显示了前两个篮子,但在原始 CSV 文件中我有数百个。
[1]: https://i.stack.imgur.com/R2ZTo.png
我想使用 Python 计算每个篮子中每个水果的平均值。这是我的代码,但它似乎无法正常工作。更好的想法?我也尝试过导入和使用 numpy 来解决这个问题,但我没有成功。
如有任何帮助或建议,我将不胜感激!我是这方面的新手。
import csv
from operator import itemgetter
fileLineList = []
averageFruitsDict = {} # Creating an empty dictionary here.
with open('Fruits.csv', newline='') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
fileLineList.append(row)
for column in fileLineList:
highest = 0
lowest = 0
total = 0
average = 0
for column in row:
if column.isdigit():
column = int(column)
if column > highest:
highest = column
if column < lowest or lowest == 0:
lowest = column
total += column
average = total / 3
averageFruitsDict[row[0]] = [highest, lowest, round(average)]
averageFruitsList = []
for key, value in averageFruitsDict.items():
averageFruitsList.append([key, value[2]])
print('\nFruits in Baskets\n')
print(averageFruitsList)
--- 所以我知道尝试使用此代码:
import pandas as pd
fruits = pd.read_csv('fruits.csv', sep=';')
print(list(fruits.columns))
fruits['Unnamed: 0'].fillna(method='ffill', inplace = True)
fruits.groupby('Unnamed: 0').mean()
fruits.groupby('Bananas').mean()
fruits.groupby('Apples').mean()
fruits.groupby('Oranges').mean()
fruits.to_csv('results.csv', index=False)
它为我创建了一个新的 CSV 文件,它看起来是正确的,我没有收到任何错误,但我无法让它计算每个篮子中每个水果的平均值。感谢所有帮助!
因此使用您发布的图片和 replicating/creating 一个名为 fruit 的相同测试 csv - 我能够使用 pandas.
创建这个快速解决方案
import pandas as pd
fruit = pd.read_csv('fruit.csv')
对于包含篮子编号的未命名列,中间为 NaN - 我们用前面的值填充。通过这样做,我们然后能够按篮子编号分组(通过使用 'Unnamed: 0' 列并将平均值应用于所有其他列)
fruit['Unnamed: 0'].fillna(method='ffill', inplace = True)
fruit.groupby('Unnamed: 0').mean()
这会为您提供您想要的每个篮子的平均水果产量(请注意我为篮子 3 编造了值)
我有一个 CSV 文件,它有几列和几行。请看上图。图片中只显示了前两个篮子,但在原始 CSV 文件中我有数百个。 [1]: https://i.stack.imgur.com/R2ZTo.png
我想使用 Python 计算每个篮子中每个水果的平均值。这是我的代码,但它似乎无法正常工作。更好的想法?我也尝试过导入和使用 numpy 来解决这个问题,但我没有成功。
如有任何帮助或建议,我将不胜感激!我是这方面的新手。
import csv
from operator import itemgetter
fileLineList = []
averageFruitsDict = {} # Creating an empty dictionary here.
with open('Fruits.csv', newline='') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
fileLineList.append(row)
for column in fileLineList:
highest = 0
lowest = 0
total = 0
average = 0
for column in row:
if column.isdigit():
column = int(column)
if column > highest:
highest = column
if column < lowest or lowest == 0:
lowest = column
total += column
average = total / 3
averageFruitsDict[row[0]] = [highest, lowest, round(average)]
averageFruitsList = []
for key, value in averageFruitsDict.items():
averageFruitsList.append([key, value[2]])
print('\nFruits in Baskets\n')
print(averageFruitsList)
--- 所以我知道尝试使用此代码:
import pandas as pd
fruits = pd.read_csv('fruits.csv', sep=';')
print(list(fruits.columns))
fruits['Unnamed: 0'].fillna(method='ffill', inplace = True)
fruits.groupby('Unnamed: 0').mean()
fruits.groupby('Bananas').mean()
fruits.groupby('Apples').mean()
fruits.groupby('Oranges').mean()
fruits.to_csv('results.csv', index=False)
它为我创建了一个新的 CSV 文件,它看起来是正确的,我没有收到任何错误,但我无法让它计算每个篮子中每个水果的平均值。感谢所有帮助!
因此使用您发布的图片和 replicating/creating 一个名为 fruit 的相同测试 csv - 我能够使用 pandas.
创建这个快速解决方案import pandas as pd
fruit = pd.read_csv('fruit.csv')
对于包含篮子编号的未命名列,中间为 NaN - 我们用前面的值填充。通过这样做,我们然后能够按篮子编号分组(通过使用 'Unnamed: 0' 列并将平均值应用于所有其他列)
fruit['Unnamed: 0'].fillna(method='ffill', inplace = True)
fruit.groupby('Unnamed: 0').mean()
这会为您提供您想要的每个篮子的平均水果产量(请注意我为篮子 3 编造了值)