數據可視化基礎專題(二):Pandas基礎(一)IO(一) excel導入與導出


1.Excel

1.1 Excel導入

read_excel()

pandas.read_excel(io, sheet_name=0, header=0, names=None, index_col=None, usecols=None, squeeze=False, dtype=None, 
engine=None, converters=None, true_values=None, false_values=None, skiprows=None, nrows=None, na_values=None,
keep_default_na=True, verbose=False, parse_dates=False, date_parser=None, thousands=None, comment=None, skipfooter=0,
convert_float=True, mangle_dupe_cols=True, **kwds)

read_excel()方法使用Python的xlrd模塊來讀取Excel 2003(.xls)版的文件,而Excel 2007+ (.xlsx)版本的是用xlrd或者openpyxl模塊來讀取的。to_excel()方法則是用來把DataFrame數據存儲為Excel格式.。(標紅參數為常用參數)

 

普通導入

導入 Excel 數據主要使用到的方法是 Pandas 中的 read_excel() 。

在進行導入操作的時候,要注意文件路徑,這里的文件路徑可以使用相對路徑也可以使用絕對路徑,但是不管哪種路徑最基本的是要寫對。

import pandas as pd

df = pd.read_excel("result_data.xlsx")# 相對路徑
print(df)

# 輸出內容
    plantform  read_num  fans_num  rank_num  like_num         create_date
0      cnblog       215         0       118         0 2019-11-23 23:00:10
1      juejin       177         0        -2         1 2019-11-23 23:00:03
2        csdn      1652        69         0        24 2019-11-23 23:00:02
3      cnblog       650         3       191         0 2019-11-22 23:00:15
4      juejin       272         3       -23         1 2019-11-22 23:00:02
..        ...       ...       ...       ...       ...                 ...
403    juejin       212         0        -1         2 2020-02-20 23:00:02
404      csdn      1602         1         0         1 2020-02-20 23:00:01
405    cnblog        19         0        41         0 2020-02-21 23:00:05
406    juejin       125         1        -4         0 2020-02-21 23:00:02
407      csdn      1475         8         0         3 2020-02-21 23:00:02

[408 rows x 6 columns]

 Windows 的操作系統,文件路徑默認是使用 \ ,如 D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx ,我們在直接使用 Windows 的文件路徑的時候需要在前面增加一個 r (轉義符)避免路徑中的 \ 被轉義,如下:

import pandas as pd
df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx")
#df = pd.read_excel("D:\\Development\\Projects\\python-learning\\python-data-analysis\\pandas-demo\\result_data.xlsx") 也可以這樣
print(df)

# 輸出內容
    plantform  read_num  fans_num  rank_num  like_num         create_date
0      cnblog       215         0       118         0 2019-11-23 23:00:10
1      juejin       177         0        -2         1 2019-11-23 23:00:03
2        csdn      1652        69         0        24 2019-11-23 23:00:02
3      cnblog       650         3       191         0 2019-11-22 23:00:15
4      juejin       272         3       -23         1 2019-11-22 23:00:02
..        ...       ...       ...       ...       ...                 ...
403    juejin       212         0        -1         2 2020-02-20 23:00:02
404      csdn      1602         1         0         1 2020-02-20 23:00:01
405    cnblog        19         0        41         0 2020-02-21 23:00:05
406    juejin       125         1        -4         0 2020-02-21 23:00:02
407      csdn      1475         8         0         3 2020-02-21 23:00:02

[408 rows x 6 columns]

指定導入 Sheet

我們在使用 Excel 導入的時候,除了可以指定文件路徑,還可以選擇導入的 Sheet 

在設置 Sheet 的時候,我們使用參數 sheet_name 來完成,示例如下:

import pandas as pd

df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name='result_data')
print(df)

# 輸出結果
    plantform  read_num  fans_num  rank_num  like_num         create_date
0      cnblog       215         0       118         0 2019-11-23 23:00:10
1      juejin       177         0        -2         1 2019-11-23 23:00:03
2        csdn      1652        69         0        24 2019-11-23 23:00:02
3      cnblog       650         3       191         0 2019-11-22 23:00:15
4      juejin       272         3       -23         1 2019-11-22 23:00:02
..        ...       ...       ...       ...       ...                 ...
403    juejin       212         0        -1         2 2020-02-20 23:00:02
404      csdn      1602         1         0         1 2020-02-20 23:00:01
405    cnblog        19         0        41         0 2020-02-21 23:00:05
406    juejin       125         1        -4         0 2020-02-21 23:00:02
407      csdn      1475         8         0         3 2020-02-21 23:00:02

[408 rows x 6 columns]

如果我們要使用一個完全不存在的 Sheet 名稱會發生什么事情呢?例如我們將上面的 sheet_name 修改為 aaa ,來看下:

import pandas as pd

df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name='aaa')
print(df)

# 輸出結果
Traceback (most recent call last):
  File "C:\Users\inwsy\AppData\Local\Programs\Python\Python37\lib\site-packages\xlrd\book.py", line 474, in sheet_by_name
    sheetx = self._sheet_names.index(sheet_name)
ValueError: 'aaa' is not in list

During handling of the above exception, another exception occurred:

可以看到這里拋出了 ValueError 的異常,並且提示 aaa 不在列表中。

在指定 Sheet 名稱的時候除了可以使用 Sheet 的具體名稱,還可以使用 Sheet 的順序,需要注意這個順序開頭是從 0 開始的。

import pandas as pd

df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name=0)
print(df)

# 輸出結果
    plantform  read_num  fans_num  rank_num  like_num         create_date
0      cnblog       215         0       118         0 2019-11-23 23:00:10
1      juejin       177         0        -2         1 2019-11-23 23:00:03
2        csdn      1652        69         0        24 2019-11-23 23:00:02
3      cnblog       650         3       191         0 2019-11-22 23:00:15
4      juejin       272         3       -23         1 2019-11-22 23:00:02
..        ...       ...       ...       ...       ...                 ...
403    juejin       212         0        -1         2 2020-02-20 23:00:02
404      csdn      1602         1         0         1 2020-02-20 23:00:01
405    cnblog        19         0        41         0 2020-02-21 23:00:05
406    juejin       125         1        -4         0 2020-02-21 23:00:02
407      csdn      1475         8         0         3 2020-02-21 23:00:02

[408 rows x 6 columns]

指定導入行索引

我們在導入文件的時候,行索引默認是會使用從 0 開始的默認索引,如果對行索引有需求的話,可以使用 index_col 參數來設置行索引。

比如我們現在設置 create_date 這個參數作為行索引,注意參數起始從 0 開始:

import pandas as pd

df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name=0, index_col=5)
print(df)

# 輸出結果
                    plantform  read_num  fans_num  rank_num  like_num
create_date                                                          
2019-11-23 23:00:10    cnblog       215         0       118         0
2019-11-23 23:00:03    juejin       177         0        -2         1
2019-11-23 23:00:02      csdn      1652        69         0        24
2019-11-22 23:00:15    cnblog       650         3       191         0
2019-11-22 23:00:02    juejin       272         3       -23         1
...                       ...       ...       ...       ...       ...
2020-02-20 23:00:02    juejin       212         0        -1         2
2020-02-20 23:00:01      csdn      1602         1         0         1
2020-02-21 23:00:05    cnblog        19         0        41         0
2020-02-21 23:00:02    juejin       125         1        -4         0
2020-02-21 23:00:02      csdn      1475         8         0         3

[408 rows x 5 columns]

指定導入列索引

同行索引一樣,默認也是采用源數據的第一行作為列索引,同樣,我們可以通過 header 進行列索引的設置, header 的默認參數為 0 ,也就是第一行,自定義可以使用其他行,將行號作為參數傳入即可,我們演示一下使用第二行作為索引:

import pandas as pd

df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name=0, header=1)
print(df)

# 輸出結果
     cnblog   215    0  118  0.1 2019-11-23 23:00:10
0    juejin   177    0   -2    1 2019-11-23 23:00:03
1      csdn  1652   69    0   24 2019-11-23 23:00:02
2    cnblog   650    3  191    0 2019-11-22 23:00:15
3    juejin   272    3  -23    1 2019-11-22 23:00:02
4      csdn  2202  129    0   37 2019-11-22 23:00:01
..      ...   ...  ...  ...  ...                 ...
402  juejin   212    0   -1    2 2020-02-20 23:00:02
403    csdn  1602    1    0    1 2020-02-20 23:00:01
404  cnblog    19    0   41    0 2020-02-21 23:00:05
405  juejin   125    1   -4    0 2020-02-21 23:00:02
406    csdn  1475    8    0    3 2020-02-21 23:00:02

[407 rows x 6 columns]

指定導入行數

有時候,如果我們只需要了解一下這個文件中有些什么數據,那么我們就不需要導入所有的數據,可以使用 nrows 來指定導入的行數,這里我們選擇導入 Excel 的前 100 行:

import pandas as pd

df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name=0, nrows=100)
print(df)

# 輸出結果
   plantform  read_num  fans_num  rank_num  like_num         create_date
0     cnblog       215         0       118         0 2019-11-23 23:00:10
1     juejin       177         0        -2         1 2019-11-23 23:00:03
2       csdn      1652        69         0        24 2019-11-23 23:00:02
3     cnblog       650         3       191         0 2019-11-22 23:00:15
4     juejin       272         3       -23         1 2019-11-22 23:00:02
..       ...       ...       ...       ...       ...                 ...
95      csdn      1492        88         0        13 2019-10-23 23:51:37
96    cnblog      1338         2       219         0 2019-10-22 23:33:33
97    juejin       204         1        -6         6 2019-10-22 23:18:19
98      csdn      1064        61      7094        18 2019-10-22 23:18:08
99    cnblog      -493         1        69         0 2019-10-21 22:38:32

[100 rows x 6 columns]

從結果的數據統計,可以看到我們成功的導入了前 100 行的數據,雖然行索引只有 99 ,是因為么我們 Excel 的頭也占了一行。

指定導入列

有時候,我們的 Excel 中的列太多了,而我們處理的數據又不需要那么多列的時候,我們可以使用 usecols 來指定我們需要導入的列

import pandas as pd

df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name=0, usecols=[0, 1, 2])
print(df)

# 輸出結果
    plantform  read_num  fans_num
0      cnblog       215         0
1      juejin       177         0
2        csdn      1652        69
3      cnblog       650         3
4      juejin       272         3
..        ...       ...       ...
403    juejin       212         0
404      csdn      1602         1
405    cnblog        19         0
406    juejin       125         1
407      csdn      1475         8

[408 rows x 3 columns]

注意這里的 usecols 的參數是一個數組,表示我們將要導入的列。

1.2 Excel導出

在做數據導出前,我們需要現有一份 DataFrame 數據,這里的數據小編偷懶,就直接讀取之前示例中的 Excel 了,當然這么做並沒有什么意義,僅用來演示導出數據。

在 Pandas 中導出 Excel 的時候,需要使用到的方法是 to_excel() 方法,在導出 Excel 文件的時候,一定要寫對文件路徑,我們在前面的文章中有介紹過文件路徑的書寫方法,直接上示例:

import pandas as pd

# 數據讀取
df = pd.read_excel("table_join_exp.xlsx", sheet_name='Sheet1')

# 數據導出
df.to_excel(excel_writer=r'D:\Development\Projects\demo.xlsx')

我們來看下 to_excel() 這個方法的語法:DataFrame.to_excel(self, excel_writer, sheet_name='Sheet1', na_rep='', float_format=None, 

columns=None, header=True, index=True, index_label=None, 
startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None, inf_rep='inf',
verbose=True, freeze_panes=None) → None

to_excel() 這個方法中的參數還是比較多的,我們挑幾個常用的介紹一下:

  • excel_writer :文件路徑或現有的ExcelWriter
  • sheet_name :字符串,默認是 “Sheet1”
  • float_format :格式化浮點數的字符串
  • header :寫出列名。如果給定字符串列表,則假定它是列名稱的別名。
  • index :寫索引
  • columns :設置要導出的列
  • encoding :編碼格式,一般我們選擇 'utf-8' 。
  • na_rep :缺失值處理
  • inf_rep :無窮值的處理

接下來看示例,這個示例小編會盡量寫得復雜一點,把我們上面的屬性盡可能的都用上,並且標注好注釋:

df.to_excel(excel_writer=r'D:\Development\Projects\demo.xlsx',
            sheet_name='測試文檔', # 創建 sheet 名稱
            index=False,  # 設置索引不顯示
            columns=['編號', '姓名'],  # 設置要導出的列
            encoding='utf-8', # 設置編碼格式
            na_rep='0', # 缺失值處理
            inf_rep='inf'  # 無窮值處理
            )

示例代碼與文件 https://github.com/meteor1993/python-learning/tree/master/python-data-analysis/pandas-demo


免責聲明!

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



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