簡體   English   中英

在 Pandas 上處理多個 csv 文件

[英]Process multiple csv files on pandas

我有三個不同的 .csv 文件,其中包含三個不同作業中學生的成績。 我想用熊貓閱讀它們並計算每個學生的平均值。 每個文件的模板是:

Student id, Mark, extra fields, ...
4358975489, 9,  ... ...
2345234523, 10,  ... ...
7634565323, 7,  ... ...
7653563366, 7,  ... ...
...         ...,  ... ...

對於第二個任務:

Student id, Mark, extra fields, ...
4358975489, 6,  ... ...
2345234523, 8,  ... ...
7634565323, 4,  ... ...
7653563366, 5,  ... ...
...         ...,  ... ...

例如,兩個文檔的期望輸出:

Student id, average, extra fields, ...
4358975489, 7.5,  ... ...
2345234523, 9,  ... ...
7634565323, 5.5,  ... ...
7653563366, 6,  ... ...
...         ...,  ... ...

最后一個文檔也是如此。 我想分別閱讀這些文檔,並為每個學生 ID 平均標記。

現在,我讀取一個文件的代碼如下:

i_df1 = pandas.read_csv('first.csv')
i_df2 = pandas.read_csv('second.csv')
i_df3 = pandas.read_csv('third.csv')

print (o_df.keys())
for i, row in i_df1.iterrows():
    pdb.set_trace()

如何同時處理所有三個文件並提取平均成績?

使用 pd.concat 連接 3 df:

 i_df1 = pandas.read_csv('first.csv')
 i_df2 = pandas.read_csv('second.csv')
 i_df3 = pandas.read_csv('third.csv')

 df = pd.concat([i_df1, i_df2, i_df3])
 df.groupby('Student id').agg({'Mark':'mean'})

如果你想一起處理所有的dfs ,你可以這樣做:

df = df1.append([df2, df3]).groupby('Student id', as_index=False).mean()

或者:

如果你想同時進行,你可以使用df.appendmean list comprehension

以下是您的dfs list

In [1220]: df_list = [i_df1, i_df2, i_df3]

您可以同時在一個文件中找到每個學生的平均值並將輸出存儲在另一個list

In [1223]: df = [i.groupby('Student_id', as_index=False).mean() for i in df_list]

您還可以使用文件名並將數據幀直接連接在一起:

fnames = ["first.csv", "second.csv", "third.csv"]
df = pd.concat(pd.read_csv(fname) for fname in fnames)

df.groupby("Student id")["Mark"].mean()

可能實際上無關緊要,但無論如何還是很高興知道:這種方法不會將數據加載到內存中兩次,而只會加載一次。

使用您提供的數據,假設他們三次獲得相同的分數

import pandas as pd
import numpy as np


data = [
    [4358975489, 9],
     [2345234523, 10],
    [7634565323, 7]]



data = np.array(data)
data = pd.DataFrame(data, columns=["student", "mark"])
data1 = pd.DataFrame(data, columns=["student", "mark"])
data2 = pd.DataFrame(data, columns=["student", "mark"])

std_maks = pd.concat([data, data1, data2]).groupby('student')
print(std_maks['mark'].mean())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM