zoukankan      html  css  js  c++  java
  • 数据可视化基础专题(三):Pandas基础(二) csv导入与导出

    1.csv导入

    1.1 csv导入

    .read_csv()函数
    pandas.read_csv(filepath_or_buffer: Union[str, pathlib.Path, IO[~AnyStr]], 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, skipfooter=0, 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, cache_dates=True, iterator=False,
    chunksize=None, compression='infer', thousands=None, decimal: str = '.', lineterminator=None, quotechar='"', quoting=0,
    doublequote=True, escapechar=None, comment=None, encoding=None, dialect=None, error_bad_lines=True, warn_bad_lines=True,
    delim_whitespace=False, low_memory=True, memory_map=False, float_precision=None)

    常用参数:

    filepath_or_buffer : various

    • 文件路径 (a strpathlib.Path, or py._path.local.LocalPath), URL (including http, ftp, and S3 locations), 或者具有 read() 方法的任何对象 (such as an open file or StringIO).

    sep : str, 默认 read_csv()分隔符为','read_table()方法,分隔符为 

    • 分隔符的使用. 如果分隔符为None,虽然C不能解析,但python解析引擎可解析,这意味着python将被使用,通过内置的sniffer tool自动检测分隔符, csv.Sniffer. 除此之外,字符长度超过1并且不同于 's+' 的将被视为正则表达式,并且将强制使用python解析引擎。需要注意的是,正则表达式易于忽略引用数据(主要注意转义字符的使用) 例如: '\r\t'.

    delimiter : str, default None

    • sep的替代参数.

    delim_whitespace : boolean, default False

    • 指定是否将空格 (e.g. ' ' or ' ')当作delimiter。 等价于设置 sep='s+'. 如果这个选项被设置为 True,就不要给 delimiter 传参了.

    列、索引、名称

    header : int or list of ints, default 'infer'

    • 当选择默认值或header=0时,将首行设为列名。如果列名被传入明确值就令header=None。注意,当header=0时,即使列名被传参也会被覆盖。

    • 标题可以是指定列上的MultiIndex的行位置的整数列表,例如 [0,1,3]。在列名指定时,若某列未被指定,读取时将跳过该列 (例如 在下面的例子中第二列将被跳过).注意,如果 skip_blank_lines=True,此参数将忽略空行和注释行, 因此 header=0 表示第一行数据而非文件的第一行.

    names : array-like, default None

    • 列名列表的使用. 如果文件不包含列名,那么应该设置header=None。 列名列表中不允许有重复值.

    index_col : int, str, sequence of int / str, or False, default None

    • DataFrame的行索引列表, 既可以是字符串名称也可以是列索引. 如果传入一个字符串序列或者整数序列,那么一定要使用多级索引(MultiIndex).

    • 注意: 当index_col=False ,pandas不再使用首列作为索引。例如, 当你的文件是一个每行末尾都带有一个分割符的格式错误的文件时.

    usecols : list-like or callable, default None

    • 返回列名列表的子集. 如果该参数为列表形式, 那么所有元素应全为位置(即文档列中的整数索引)或者 全为相应列的列名字符串(这些列名字符串为names参数给出的或者文档的header行内容).例如,一个有效的列表型参数 usecols 将会是是 [0, 1, 2] 或者 ['foo', 'bar', 'baz'].

    • 元素顺序可忽略,因此 usecols=[0, 1]等价于 [1, 0]。如果想实例化一个自定义列顺序的DataFrame,请使用pd.read_csv(data, usecols=['foo', 'bar'])[['foo', 'bar']] ,这样列的顺序为 ['foo', 'bar'] 。如果设置pd.read_csv(data, usecols=['foo', 'bar'])[['bar', 'foo']] 那么列的顺序为['bar', 'foo'] 。

    encoding : str, default None

    • Encoding to use for UTF when reading/writing (e.g. 'utf-8')

    使用 read_csv 导入 CSV 的文件:

    import pandas as pd
    
    df = pd.read_csv(r"D:DevelopmentProjectspython-learningpython-data-analysispandas-demo
    esult_data.csv")
    print(df)
    
    # 输出结果
        plantform  read_num  fans_num  rank_num  like_num          create_date
    0      cnblog       215         0       118         0  23/11/2019 23:00:10
    1      juejin       177         0        -2         1  23/11/2019 23:00:03
    2        csdn      1652        69         0        24  23/11/2019 23:00:02
    3      cnblog       650         3       191         0  22/11/2019 23:00:15
    4      juejin       272         3       -23         1  22/11/2019 23:00:02
    ..        ...       ...       ...       ...       ...                  ...
    403    juejin       212         0        -1         2   20/2/2020 23:00:02
    404      csdn      1602         1         0         1   20/2/2020 23:00:01
    405    cnblog        19         0        41         0   21/2/2020 23:00:05
    406    juejin       125         1        -4         0   21/2/2020 23:00:02
    407      csdn      1475         8         0         3   21/2/2020 23:00:02
    
    [408 rows x 6 columns]

    可以看到,和上面的 Excel 导入的数据保持一致,只是后面的时间日期类型格式化有点区别。

    其余的操作和上面介绍的 Excel 是一样的,这里就不一一列举了,有一个需要注意的点是,编码格式的指定,这时我们需要设置 encoding 参数,如果不做设置,那么默认的指定格式是 utf-8 的,因为常用的格式除了 utf-8 还会有 gbk 、 gb2312 等等。

    import pandas as pd
    
    # 指定编码格式
    df = pd.read_csv(r"D:DevelopmentProjectspython-learningpython-data-analysispandas-demo
    esult_data.csv", encoding='utf-8')
    print(df)
    
    # 输出结果
        plantform  read_num  fans_num  rank_num  like_num          create_date
    0      cnblog       215         0       118         0  23/11/2019 23:00:10
    1      juejin       177         0        -2         1  23/11/2019 23:00:03
    2        csdn      1652        69         0        24  23/11/2019 23:00:02
    3      cnblog       650         3       191         0  22/11/2019 23:00:15
    4      juejin       272         3       -23         1  22/11/2019 23:00:02
    ..        ...       ...       ...       ...       ...                  ...
    403    juejin       212         0        -1         2   20/2/2020 23:00:02
    404      csdn      1602         1         0         1   20/2/2020 23:00:01
    405    cnblog        19         0        41         0   21/2/2020 23:00:05
    406    juejin       125         1        -4         0   21/2/2020 23:00:02
    407      csdn      1475         8         0         3   21/2/2020 23:00:02
    
    [408 rows x 6 columns]

    这里的编码格式是 utf-8 ,所以这里对编码格式的设置是 encoding='utf-8'

    1.2 CSV 导出

    在导出 CSV 的时候,要使用到的方法是 to_csv() ,和上面导出 Excel 实际上相差并不大,一样是要先设置文件路径,接下来可以设置索引、导出的列、分隔符号、编码格式、缺失值等等。

    还是先来看下 to_csv() 语法

    DataFrame.to_csv(self, path_or_buf: Union[str, pathlib.Path, IO[~AnyStr], NoneType] = None, 
    sep: str = ',', na_rep: str = '', float_format: Union[str, NoneType] = None,
    columns: Union[Sequence[Union[Hashable, NoneType]], NoneType] = None, header: Union[bool, List[str]] = True, index: bool = True,
    index_label: Union[bool, str, Sequence[Union[Hashable, NoneType]], NoneType] = None, mode: str = 'w', encoding: Union[str, NoneType] = None,
    compression: Union[str, Mapping[str, str], NoneType] = 'infer', quoting: Union[int, NoneType] = None, quotechar: str = '"',
    line_terminator: Union[str, NoneType] = None, chunksize: Union[int, NoneType] = None, date_format: Union[str, NoneType] = None, doublequote: bool = True,
    escapechar: Union[str, NoneType] = None, decimal: Union[str, NoneType] = '.') → Union[str, NoneType]

    可以看到的是 to_csv() 比较 to_excel() 有着更多的参数,实际上,我们一些常用的参数并不多,小编下面接着给出一个比较复杂的导出示例:

    df.to_csv(path_or_buf=r'D:DevelopmentProjectsdemo.csv', # 设置导出路径
              index=False,  # 设置索引不显示
              sep=',', # 设置分隔符号
              na_rep='0', # 缺失值处理
              columns=['编号', '姓名'],  # 设置要导出的列
              encoding='utf-8', # 设置编码格式
              )
  • 相关阅读:
    echarts 算百分比与js toFixed算出来的百分比不一致的问题。
    VUE, Vue Router Tab 显示动态页签名称。
    [日常坑]前端j's数据导出excel,导出的文件损坏
    [最新 | Build 3211]Sublime Text 2.x, 3.x 许可License集合
    图片滤波
    electron-ipc通信性能分析
    设计vue3的请求实体工厂
    canvas-修改图片亮度
    canvas性能-drawImage渲染图片
    基于windows配置gitlab-runner
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/12667774.html
Copyright © 2011-2022 走看看