数据可视化基础专题(三):Pandas基础(二)IO(二) 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()方法,分隔符为 \t

  • 分隔符的使用. 如果分隔符为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 '\t')当作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:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_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:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_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:\Development\Projects\demo.csv', # 设置导出路径
          index=False,  # 设置索引不显示
          sep=',', # 设置分隔符号
          na_rep='0', # 缺失值处理
          columns=['编号', '姓名'],  # 设置要导出的列
          encoding='utf-8', # 设置编码格式
          )

 

posted @ 2020-04-09 16:27  秋华  阅读(888)  评论(0编辑  收藏  举报