使用pandas平均一列的子集

问题描述 投票:0回答:1

我有一个.csv文件,我正在阅读。我只读取其中的选择列,我需要进一步处理这些数据,然后再将其保存到Excel工作表中。我们的想法是对文件夹中的所有文件重复此过程,并使用与原始.csv相同的名称保存工作表。

截至目前,我能够从.csv中读取特定列,并将整个文件写入excel。在保存到excel之前,我还没弄清楚如何进一步处理这些列。进一步处理涉及

  1. 分别对每列平均行18000-20000。
  2. 计算(列值 - 平均值)/平均值
  3. 将这些值保存在具有不同列名的单独列中。

我的代码如下。需要一些帮助。

import pandas as pd
import os
from pathlib import Path


for f in os.listdir():
    file_name, file_ext = os.path.splitext(f) #splitting into file name and extension

    if file_ext == '.atf':
        #open the data file and get data only from specific columns.
        df = pd.read_csv(f, header = 9, index_col = 0, usecols = [0,55,59,63,67,71,75,79,83,87,91,95,99,103], encoding = "ISO-8859-1", sep = '\t', dtype = {'YFP.13':str,'YFP.14':str,'YFP.15':str,'YFP.16':str,'YFP.17':str,'YFP.18':str,'YFP.19':str,'YFP.20':str,'YFP.21':str,'YFP.22':str,'YFP.23':str,'YFP.24':str,'YFP.25':str,'Signals=':str}) 

        df.to_excel(file_name+'.xlsx',sheet_name=file_name, engine = 'xlsxwriter') #writing into an excel file
excel pandas csv python-3.6
1个回答
0
投票

假设您的数据框具有4列和100行的形状:

data = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))
  1. 分别对每列平均行18000-20000。

要对子集执行平均,可以根据索引上的不等式定义逻辑掩码,并对选定的数据帧应用平均功能。您希望稍后使用它们,结果将保存在新的数据框中:

means = data[(60<data.index) & (80>data.index)].mean()
  1. 计算(列值 - 平均值)/平均值
  2. 将这些值保存在具有不同列名的单独列中

对于最后两个步骤,下面的代码单独说明:

cols = data.columns
for col in cols:
    data[col +"_calc"] = (data[col]-means[col])/means[col]

最后,您可以像以前一样将数据框“data”导出为ex​​cel格式。

© www.soinside.com 2019 - 2024. All rights reserved.