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
str
,pathlib.Path
, orpy._path.local.LocalPath
), URL (including http, ftp, and S3 locations), 或者具有read()
方法的任何对象 (such as an open file orStringIO
).
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', # 设置编码格式 )