欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

pandas 数据清洗和分析

程序员文章站 2022-11-05 19:59:13
python是一款非常好的数据分析工具。高*度和丰富的第三方库的支持,对于大部分行业的数据分析非常友好,其中最为常用的数据清洗和分析第三方库是numpy和pandas。常用的xlsx、csv、txt数据读取、合并、缺失值处理、重复值处理、异常值处理以及切片替换等操作都比较简单且容易查询。本文主要介绍一些实际工作中用到的一些方法。1、数据读取和导出经验1)pandas连接mysqlfrom sqlalchemy import create_engine def import_data_mysq...

python是一款非常好的数据分析工具。高*度和丰富的第三方库的支持,对于大部分行业的数据分析非常友好,其中最为常用的数据清洗和分析第三方库是numpy和pandas。常用的xlsx、csv、txt数据读取、合并、缺失值处理、重复值处理、异常值处理以及切片替换等操作都比较简单且容易查询。本文主要介绍一些实际工作中用到的一些方法。

1、数据读取和导出经验

1)pandas连接mysql

from sqlalchemy import create_engine    
def import_data_mysql(df,table):
    """
        数据导入mysql
    """
    engine = create_engine('mysql+pymysql://root:‘密码’@‘地址’:‘端口’/‘库’?charset=utf8')
    df1.to_sql(name = table,#表名
          con = engine,
          if_exists = 'append',
          index = False)
    return df

# 数据提取为dataframe
def extract_data(sql_text):
    engine = create_engine('mysql+pymysql://root:‘密码’@‘地址’:‘端口’/‘库’?charset=utf8')
    sql = sql_text
    df = pd.read_sql_query(sql, engine)
    return df

2)大数据文件读取(应对memory error问题)

通过chunksize数据块

#读取大文件chunksize
df = pd.read_csv(os.path.join(path, filename),encoding='gb18030',iterator=True,sep='|')

def import_chunks_data(df,chunksize):
    loop = True
    chunkSize = chunksize
    chunks = []
    index=0
    while loop:
        try:
            print(index)
            chunk = df.get_chunk(chunkSize)
            chunks.append(chunk)
            index+=1
        except StopIteration:
            loop = False
    print("Iteration is stopped.")
    return chunks

full_ls =  import_chunks_data(df,30000)#输出结果是list

2、迭代的技巧,enumerate、exec和zip

enumerate相当于给每个元素加了索引,即索引与元素一一对应

exec 执行储存在字符串或文件中的Python语句,可以实现对多个dataframe或者变量的执行操作

zip 实现将对象对应的元素打包成元组,然后返回由这些元组组成的列表

from docx import Document  
for m,doc in enumerate(document):#从document文件中提取表格数据为dataframe
        for table in doc.tables:
            df = [['' for i in range(len(table.columns))] for j in range(len(table.rows))]
            for i, row in enumerate(table.rows):
                for j, cell in enumerate(row.cells):
                    df[i][j] = cell.text
            exec('co'+'_'+str(m)+'.append(pd.DataFrame(df))')
#zip
ls1 = [a,b,c]
ls2 = [d,e,f]
ziped = list(zip(ls1,ls2))
for i in ziped:
    print(sum_jihuo(full_jh,i[0],i[1]))

3、pandas数据概览报告

pandas_profiling库可实现对数据概览分析 生成html报告,包含数据分布、缺失值、重复性等内容

import pandas_profiling
profile = raw_data.profile_report(title="oil_data")
profile.to_file(output_file="oil_data.html")

4、dataframe 数据append

for i in unique_Asset:
    a = df_merge[df_merge['Asset Number']==str(i)]
    ziped = list(zip(a['Latitude'].to_list(),a['Longitude'].to_list()))
    for j,dis in enumerate(ziped):
        #print(j,dis)
        df_distance = df_distance.append(pd.DataFrame({"设备编码":a['Asset Number'].iloc[j],
                                       "巡检结束时间":a['Inspection EndTime'].iloc[j],
                                       "纬度":a['Latitude'].iloc[j],
                                       "经度":a['Longitude'].iloc[j],
                                       "直线距离(m)":round(geodesic(ziped[0],dis).m,2)},index=[0]),ignore_index = True)

5、rank排名

#取排名
full['rank'] = full.groupby(['class_id'])['score'].rank(ascending=False,method='min')
#降序排序,method='min'模式为1224,dense模式1223,max模式为1334

6、等比例分层抽样

DataFrame.sample(n,frac,replace=False)

n 按个数抽样 frac 按百分比抽样 replace 是否放回抽样,默认false为不放回

#单维度整群抽样
label_unique = list(df['省份'].unique()) # 定义标签值域
full = pd.DataFrame()
for i in label_unique:
    df_x = df[df['省份']==i].sample(frac=0.3) #30%比例
    full = pd.concat([full,df_x],ignore_index=True)

7、条件赋值

#多条件分别赋值:条件一,结果一、条件二、结果二
df['new'] = np.select([condition1,condition2,...],[val1,val2,...],other)

本文地址:https://blog.csdn.net/weixin_42305022/article/details/107450739

相关标签: python 数据分析