數據可視化基礎專題(三):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', # 設置編碼格式
          )

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM