zoukankan      html  css  js  c++  java
  • Python之Pandas 简介与Pandas 读取csv文件及相关操作01

    1.Pandas简介

    Pandas处理以下三个数据结构 -

    • 系列(Series)
    • 数据帧(DataFrame)
    • 面板(Panel)
    这些数据结构构建在Numpy数组之上,这意味着它们很快
    考虑这些数据结构的最好方法是,较高维数据结构是其较低维数据结构的容器。 例如,DataFrameSeries的容器,PanelDataFrame的容器。
    DataFrame被广泛使用,是最重要的数据结构之一。面板使用少得多。
    数据帧(DataFrame)是一个具有异构数据的二维数组。 例如,
    上表表示具有整体绩效评级组织的销售团队的数据。数据以行和列表示。每列表示一个属性,每行代表一个人。
    2.Pandas读取csv文件
    pandas.read_csv(filepath_or_buffer, sep=', ', delimiter=None, header='infer', names=None, index_col=None, usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, iterator=False, chunksize=None, compression='infer', thousands=None, decimal=b'.', lineterminator=None, quotechar='"', quoting=0, escapechar=None, comment=None, encoding=None, dialect=None, tupleize_cols=None, error_bad_lines=True, warn_bad_lines=True, skipfooter=0, doublequote=True, delim_whitespace=False, low_memory=True, memory_map=False, float_precision=None)
    常用参数解释:read_csv与read_table常用的参数(更多参数查看官方手册):
    
    filepath_or_buffer #需要读取的文件及路径
    sep / delimiter 列分隔符,普通文本文件,应该都是使用结构化的方式来组织,才能使用dataframe
    header 文件中是否需要读取列名的一行,header=None(使用names自定义列名,否则默认0,1,2,...),header=0(将首行设为列名)
    names 如果header=None,那么names必须制定!否则就没有列的定义了。
    shkiprows= 10 # 跳过前十行 
    nrows = 10 # 只去前10行 
    usecols=[0,1,2,...] #需要读取的列,可以是列的位置编号,也可以是列的名称
    parse_dates = ['col_name'] # 指定某行读取为日期格式 
    index_col = None /False /0,重新生成一列成为index值,0表示第一列,用作行索引的列编号或列名。可以是单个名称/数字或由多个名称/数宇组成的列表(层次化索引)
    error_bad_lines = False # 当某行数据有问题时,不报错,直接跳过,处理脏数据时使用 
    na_values = 'NULL' # 将NULL识别为空值
    encoding='utf-8' #指明读取文件的编码,默认utf-8

     读取csv/txt/tsv文件,返回一个DataFrame类型的对象。

    案例分析:

    (1)参数只有csv文件的路径,其他保持默认

     在读取的时候,默认会将第一行记录当成列名。如果没有列名,我们可以指定header=None。
    import pandas as pd
    df=pd.read_csv('hotelreviews50_1.csv') #hotelreviews50_1.csv文件与.py文件在同一级目录下
    print(df.head(3)) #读取前3行

    控制台输出:

    从输出可见,默认会将第一行当成列名

    (2)在读数之后自定义标题

    import pandas as pd
    df=pd.read_csv('hotelreviews50_1.csv') #hotelreviews50_1.csv文件与.py文件在同一级目录下
    #在读数之后自定义标题
    columns_name=['mysql_id','hotelname','customername','reviewtime','checktime','reviews','scores','type','room','useful','likenumber']
    df.columns=columns_name
    print(df.head(3)) #读取前3行

    控制台输出:

    (3)csv文件没有列标题,从第一行就直接开始是数据的录入了

    import pandas as pd
    df=pd.read_csv('hotelreviews50_1.csv',header=None) #hotelreviews50_1.csv文件与.py文件在同一级目录下
    #在读数之后自定义标题
    columns_name=['mysql_id','hotelname','customername','reviewtime','checktime','reviews','scores','type','room','useful','likenumber']
    df.columns=columns_name
    print(df.head(3)) #读取前3行

    这个时候一定要加'header=None', 这样读进来的列名就是系统默认的0,1,2... 序列号

    由上可见编号为201 的数据读进来了。

    (4)使用pandas读取csv文件的指定列方法:pd.read_csv("filepath",usecols=[0,1,2,...],[encoding='编码'])

    读取csv文件中每行的前3列

    import pandas as pd
    df=pd.read_csv('hotelreviews50_1.csv',header=None,usecols=[0,1,2,3]) #hotelreviews50_1.csv文件与.py文件在同一级目录下
    #在读数之后自定义标题
    # columns_name=['mysql_id','hotelname','customername','reviewtime','checktime','reviews','scores','type','room','useful','likenumber']
    columns_name=['mysql_id','hotelname','customername','reviewtime']
    df.columns=columns_name
    print(df.head(3)) #读取前3行

    控制台输出:

    (5)pandas 在Dataframe中新添加一列

    其实在Dataframe中新添加一列很简单,直接指明列名,然后赋值就可以了。

    df['split_word_result']='new'
    import pandas as pd
    df=pd.read_csv('hotelreviews50_1.csv',header=None) #hotelreviews50_1.csv文件与.py文件在同一级目录下
    #在读数之后自定义标题
    columns_name=['mysql_id','hotelname','customername','reviewtime','checktime','reviews','scores','type','room','useful','likenumber']
    df.columns=columns_name
    df['split_word_result']='new'
    print(df.head(3))

    控制台输出:

    3.Pandas查看数据表信息 

    (1)维度查看

    利用df.shape

    import pandas as pd
    df=pd.read_csv('hotelreviews50_1.csv',header=None,usecols=[0,1,2,3]) #hotelreviews50_1.csv文件与.py文件在同一级目录下
    #在读数之后自定义标题
    # columns_name=['mysql_id','hotelname','customername','reviewtime','checktime','reviews','scores','type','room','useful','likenumber']
    columns_name=['mysql_id','hotelname','customername','reviewtime']
    df.columns=columns_name
    print(df.head(3)) #读取前3行
    print(df.shape)

    控制台输出:

     (2)数据表基本信息(维度、列名称、数据格式、所占空间等)

    import pandas as pd
    df=pd.read_csv('hotelreviews50_1.csv',header=None,usecols=[0,1,2,3]) #hotelreviews50_1.csv文件与.py文件在同一级目录下
    #在读数之后自定义标题
    # columns_name=['mysql_id','hotelname','customername','reviewtime','checktime','reviews','scores','type','room','useful','likenumber']
    columns_name=['mysql_id','hotelname','customername','reviewtime']
    df.columns=columns_name
    print(df.head(3)) #读取前3行
    print(df.info())

    控制台输出:

    D:softwaretoolsanacondapython.exe D:/pycharmprojects/hoteltest01/hoteltest01/test_csv_pandas.py
       mysql_id   hotelname customername     reviewtime
    0       201  杭州马可波罗假日酒店        _***7  发表于2020-05-25
    1       202  杭州马可波罗假日酒店        舟***猫  发表于2020-04-10
    2       203  杭州马可波罗假日酒店        1***8  发表于2020-05-05
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 50 entries, 0 to 49
    Data columns (total 4 columns):
    mysql_id        50 non-null int64
    hotelname       50 non-null object
    customername    50 non-null object
    reviewtime      50 non-null object
    dtypes: int64(1), object(3)
    memory usage: 1.6+ KB
    None

    (3)每一列数据的格式

    利用df.dtypes

    import pandas as pd
    df=pd.read_csv('hotelreviews50_1.csv',header=None,usecols=[0,1,2,3]) #hotelreviews50_1.csv文件与.py文件在同一级目录下
    #在读数之后自定义标题
    # columns_name=['mysql_id','hotelname','customername','reviewtime','checktime','reviews','scores','type','room','useful','likenumber']
    columns_name=['mysql_id','hotelname','customername','reviewtime']
    df.columns=columns_name
    print(df.head(3)) #读取前3行
    print(df.dtypes)

    控制台输出:

    D:softwaretoolsanacondapython.exe D:/pycharmprojects/hoteltest01/hoteltest01/test_csv_pandas.py
       mysql_id   hotelname customername     reviewtime
    0       201  杭州马可波罗假日酒店        _***7  发表于2020-05-25
    1       202  杭州马可波罗假日酒店        舟***猫  发表于2020-04-10
    2       203  杭州马可波罗假日酒店        1***8  发表于2020-05-05
    mysql_id         int64
    hotelname       object
    customername    object
    reviewtime      object
    dtype: object

    (4)查看前3行数据、后3行数据

    df.head() #默认前10行数据,注意:可以在head函数中填写参数,自定义要查看的行数
    df.tail() #默认后10 行数据

    import pandas as pd
    df=pd.read_csv('hotelreviews50_1.csv',header=None,usecols=[0,1,2,3]) #hotelreviews50_1.csv文件与.py文件在同一级目录下
    #在读数之后自定义标题
    # columns_name=['mysql_id','hotelname','customername','reviewtime','checktime','reviews','scores','type','room','useful','likenumber']
    columns_name=['mysql_id','hotelname','customername','reviewtime']
    df.columns=columns_name
    print(df.head(3)) #读取前3行
    print(df.tail(3)) #读取后3行

    控制台输出:

    4.数据清洗
    (1)空值NAN值处理方法
    <1>用数字0填充空值:
    import pandas as pd
    df=pd.read_csv('hotelreviews50_1.csv',header=None,usecols=[0,1,2,3]) #hotelreviews50_1.csv文件与.py文件在同一级目录下
    #在读数之后自定义标题
    # columns_name=['mysql_id','hotelname','customername','reviewtime','checktime','reviews','scores','type','room','useful','likenumber']
    columns_name=['mysql_id','hotelname','customername','reviewtime']
    df.columns=columns_name
    print(df.head(3)) #读取前3行
    df.fillna(value=0,inplace=True)
    print(df.head(3))

    注意:df.fillna不会立即生效,需要设置inplace=True

    控制台输出:

    <2>
    (2)清除city字段的字符空格
    字符串(str)的头和尾的空格,以及位于头尾的 之类给删掉
    import pandas as pd
    df=pd.read_csv('hotelreviews50_1.csv',header=None,usecols=[0,1,2,3]) #hotelreviews50_1.csv文件与.py文件在同一级目录下
    #在读数之后自定义标题
    # columns_name=['mysql_id','hotelname','customername','reviewtime','checktime','reviews','scores','type','room','useful','likenumber']
    columns_name=['mysql_id','hotelname','customername','reviewtime']
    df.columns=columns_name
    print(df.head(3)) #读取前3行
    df['customername']=df['customername'].map(str.strip)
    print(df.head(3))

    (3)大小写转换

    df['customername']=df['customername'].str.lower()
    import pandas as pd
    df=pd.read_csv('hotelreviews50_1.csv',header=None,usecols=[0,1,2,3]) #hotelreviews50_1.csv文件与.py文件在同一级目录下
    #在读数之后自定义标题
    # columns_name=['mysql_id','hotelname','customername','reviewtime','checktime','reviews','scores','type','room','useful','likenumber']
    columns_name=['mysql_id','hotelname','customername','reviewtime']
    df.columns=columns_name
    print(df.head(3)) #读取前3行
    df['customername']=df['customername'].str.lower()
    print(df.head(3))

    控制台输出:

    (4)删除重复出现的值

    df.drop_duplicates(['customername'],inplace=True)
    import pandas as pd
    df=pd.read_csv('hotelreviews50_1.csv',header=None,usecols=[0,1,2,3]) #hotelreviews50_1.csv文件与.py文件在同一级目录下
    #在读数之后自定义标题
    # columns_name=['mysql_id','hotelname','customername','reviewtime','checktime','reviews','scores','type','room','useful','likenumber']
    columns_name=['mysql_id','hotelname','customername','reviewtime']
    df.columns=columns_name
    print(df.head(3)) #读取前3行
    df.drop_duplicates(['customername'],inplace=True)
    print(df.head(3)) #读取前3行

    控制台输出:

    (5)数据替换

    df['customername'].replace('111','qqq',inplace=True)
    import pandas as pd
    df=pd.read_csv('hotelreviews50_1.csv',header=None,usecols=[0,1,2,3]) #hotelreviews50_1.csv文件与.py文件在同一级目录下
    #在读数之后自定义标题
    # columns_name=['mysql_id','hotelname','customername','reviewtime','checktime','reviews','scores','type','room','useful','likenumber']
    columns_name=['mysql_id','hotelname','customername','reviewtime']
    df.columns=columns_name
    print(df.head(3)) #读取前3行
    df['customername'].replace('111','qqq',inplace=True)
    print(df.head(3)) #读取前3行

    控制台输出:

    (6)修改某行某列的数据
    <1>方法1
    df.loc[index,'review_split']=review_split
    df.loc[index,'review_pos']=review_pos
    df.loc[index,'review_split_pos']=review_split_pos

    注意:index为行索引,'review_split'、'review_pos'、'review_split_pos'为列名

    <2>方法2 

    csv2.iloc[index, 5] ="hello"
    参考文献:https://www.yiibai.com/pandas

     https://blog.csdn.net/qq_42196922/article/details/90043750    非常经典

    https://www.cnblogs.com/zhuminghui/p/9401489.html 究极推荐

    https://blog.csdn.net/gaozhanfire/article/details/95653196     iloc与loc函数的使用教程

  • 相关阅读:
    【转】[fix] Wireshark error: There are no interfaces on which a capture can be done. on Mac OS X
    【转载】Linux 文件系统的目录结构
    postgreSQL使用
    [转载] Linux启动过程详解-《别怕Linux编程》之八
    冒泡排序
    java值类型和引用类型
    冒泡排序法与二分查找法
    关系型数据库
    SQList的建表并添加数据练习
    数据存储——SQLite数据库存储
  • 原文地址:https://www.cnblogs.com/luckyplj/p/13193985.html
Copyright © 2011-2022 走看看