编程语言
首页 > 编程语言> > Python_pandas处理数据格式和统计频次

Python_pandas处理数据格式和统计频次

作者:互联网

Pandas 数据处理

Pandas 数据预处理--格式问题

知识点说明

  读入和写出
  结构化数据--处理-清洗-变换
   enumerate zip sorted reversed
import numpy as np   
 Numpy -- ndarray  --数组计算框架 np.array -- 向量化运算  数组的切片、数组子集-视图--对视图的修改会影响到原数组
     显式的拷贝--.copy()
	 切片--视图
	 整数索引 布尔索引 -- 整数索引-整数数组(传递所需的列表或数组)--将数据复制到新的数组  --同质型数值类
import pandas as pd
pandas
  Serirs DataFrame
  Serirs--值序列(value)和索引(index)  索引name  
loc切片的行索引和列索引的索引名,
iloc中传入需要切片的行索引和列索引的数值索引范围 左闭右开的(包含起始值,不包含结束值)    
    整数索引   布尔索引  name索引
	轴-- axis 0为行向  1为列向
	
	拼接和合并
	  pd.concat() 行列拼接
	  pd.merge()  索引-列-关联
	
	重构和透视
	  statck unstack
	  pd.piovt  pd.melt
	
	分组
	  groupby 分组聚合--聚合函数和自定义聚合函数aggregate 
    
	其他
	  cut  qcut pivot_table pd.crosstable
	  
	时间序列
	  shift

代码示例

import os
import sys
import pandas as pd

if __name__ == '__main__':
    input_dir_nm= r"F:\testdata\test.txt"
    out_rst_file = r"F:\testdata\test-stat.txt"
    #input_dir_nm = sys.argv[1]
	## 读入数据
    res = pd.read_csv(input_dir_nm,header=None,sep=',',names=['student_id','subject','score'])
    print(res.info())
	## 分组统计
    res_cnt = res.groupby(['student_id','subject'],as_index=False).size()
    print(res_cnt)
	## 数据形式变换
    res_cnt = pd.pivot(res_cnt, index="student_id", columns="subject", values="size")
	## 重命名和填充
    res_cnt_df = res_cnt.rename_axis(columns=None).reset_index().fillna(0)
    print(res_cnt_df)
    # 一列分为多列
    key_id_df = res_cnt_df['student_id'].str.split('/', expand=True)
    # 选取其中两列,并重新命名-将旧列名称指定为键,将新名称指定为值
    key_id_df   = key_id_df.iloc[:, [4,6]].rename(columns={4:'base_nm',6:'age_id'})
    print(key_id_df)
    # 两个dataframe 按照列合并-(df1,df2左右拼接)
    lst_f = pd.concat([key_id_df,res_cnt_df],axis=1)
    print(lst_f)
    ## 输出
    lst_f.to_csv(out_rst_file,index=0)


    # res_cnt_df = res_cnt.set_index(["student_id", "subject"])
    # two_level_index_series = res_cnt_df["size"]
    # result_df = two_level_index_series.unstack().rename_axis(columns=None).reset_index()
    # print(result_df)

使用传统的

使用 defaultdict 进行统计

代码示例

from collections import defaultdict

def get_sig_stat(student_file):
    # d=defualt(),括号中的参数可选[int,set,list]中的一个
    mark_labels = { 'chinese': 0,  'math': 0,  'history': 0, 'biology': 0, 'physics': 0, 'politics': 0,  }
    pair_d = defaultdict(list)
    result = list()
    with open(student_file, encoding="utf-8") as f:
        for file_num, in_data in enumerate(f):
            in_data = in_data.split(",")
            #img_id = data[0].split("/")[-1].strip()
            img_id = in_data[0].strip()
            kind_type = in_data[1].strip()
            pair_d[img_id].append(kind_type)
        for unique_nm ,values in pair_d.items():
            category_d = defaultdict(int)
            for kind_data in values:
                category_d[kind_data] +=1
            for type_nm ,type_cnt in  mark_labels.items():
                if type_nm in  category_d.keys() :
                    mark_labels[type_nm]= category_d.get(type_nm)
            result.append((unique_nm,mark_labels))
    return  result
if __name__ == '__main__':
    input_dir_nm= r"F:\testdata\test.txt"
    rd = get_sig_stat(input_dir_nm)
    for ad in rd:
        print(ad)

参考

pandas行转列、列转行、以及一行生成多行  http://www.manongjc.com/detail/14-njxofzmjxqmpvnq.html
pandas取出某两列 https://blog.csdn.net/qq236237606/article/details/112320935
Python中的defaultdict方法  https://blog.csdn.net/weixin_44500833/article/details/104944980

标签:cnt,nm,Python,res,pandas,--,df,数据格式,id
来源: https://www.cnblogs.com/ytwang/p/16249723.html