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()方法,分隔符為 \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', # 設置編碼格式 )
