【问题标题】:To average a subset of one column using pandas使用熊猫平均一列的子集
【发布时间】:2017-12-17 16:52:35
【问题描述】:

我有一个正在读取的 .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】:

    假设您的数据框具有 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]
    

    最后,您可以像之前一样将数据框“数据”导出为 excel 格式。

    【讨论】:

      猜你喜欢
      • 2021-08-30
      • 1970-01-01
      • 2015-09-11
      • 2022-11-14
      • 2021-02-27
      • 2015-07-18
      • 1970-01-01
      相关资源
      最近更新 更多