【Pandas基礎教程】第02講 Pandas讀取資料

斵冰且行發表於2020-12-24

1. 讀取純文字檔案

pd.read_csv() 用於讀取csv、tsv、txt等純文字檔案,csv以逗號分隔,tsv以製表符分隔,txt的分隔符任意。

pd.read_csv(
    filepath_or_buffer: FilePathOrBuffer,  # 檔案路徑
    sep=",",                               # 分隔符
    header="infer",                        # 列名
    names=None,                            # 自定義列名
    index_col=None,                        # 索引名
    dtype=None,                            # 資料型別
    engine=None,                           # 解析器引擎
    converters=None,                       # 函式轉換
    encoding=None,                         # 檔案編碼
    skipinitialspace=False,                # 是否忽略分隔符後的空白
    skiprows=None,                         # 從檔案頭部忽略的行數
    skipfooter=0,                          # 從檔案尾部忽略的行數
    nrows=None                             # 讀取的行數
)
  • filepath_or_buffer:str, path object or file-like object。字串路徑、路徑物件或類檔案物件,包括本地檔案路徑(例如 ./datas/1.csv)、URL地址(http、ftp、s3、gs和file)等;
  • sep:str, default ‘,’。指定分隔符
  • header:int, list of int, default ‘infer’。指定行數作為列名,開始讀取資料的行數。header=None 沒有列名,自動設定為數字編號;header=0 以第一行作為列名;可以傳入一個列表,形成多重列名,列表中未指定的中間行將被跳過;
  • names:array-like, optional。自定義列名
  • index_col:int, str, sequence of int / str, or False, default None,指定列數/列名作為索引名,可以傳入一個序列,形成多重索引;
  • dtype:Type name or dict of column -> type, optional,指定各列的資料型別,例如 {'a': np.float64, 'b': np.int32}
  • engine:{‘c’, ‘python’}, optional,指定解析器引擎
  • converters:dict, optional,對某些列進行函式轉換,例如 {'金額': lambda x: x+1, '交易量': lambda x: x*2}
  • encoding:str, optional,指定檔案編碼
  • skipinitialspace:bool, default False,是否忽略分隔符後的空白
  • skiprows:list-like, int or callable, optional,從檔案頭部忽略的行數
  • skipfooter:int, default 0,從檔案尾部忽略的行數
  • nrows:int, optional,指定讀取的行數,用於讀取部分資料;

C引擎解析速度更快,Python引擎功能更完善。如果分隔符為None,C引擎無法自動檢測分隔符,強制使用Python引擎,它呼叫Python內建嗅探器工具csv.Sniffer檢測分隔符。此外,超過1個字元且不同於 \s+ 的分隔符將被視為正規表示式,C引擎不能解析正規表示式,強制使用Python引擎。

2. 讀取Excel檔案

pd.read_excel() 用於讀取Excel檔案,包括xls、xlsx、xlsm、xlsb、odf、ods和odt等。

pd.read_excel(
    io,              # 檔案路徑
    sheet_name=0,    # 工作表
    header=0,        # 列名
    names=None,      # 自定義列名
    index_col=None,  # 索引名
    dtype=None,      # 資料型別
    engine=None,     # 解析器引擎
    converters=None, # 函式轉換
    skiprows=None,   # 從檔案頭部忽略的行數
    skipfooter=0,    # 從檔案尾部忽略的行數
    nrows=None,      # 讀取的行數
):
  • io:str, bytes, ExcelFile, xlrd.Book, path object, or file-like object,字串路徑、路徑物件或類檔案物件,包括本地檔案路徑(例如 ./datas/1.xls)、URL地址(http、ftp、s3、gs和file)等;
  • sheet_name:str, int, list, or None, default 0,指定工作表,可以是多張工作表,返回字典,sheet_name=None獲取所有工作表;
  • engine:str, default None,指定解析器引擎,必須與檔案型別相匹配,包括xlrd、openpyxl、odf和pyxlsb等。

3. 讀取MySQL資料庫

pd.read_sql() 用於讀取MySQL資料庫,它是 read_sql_table()read_sql_query() 的便捷封裝,根據輸入情形委派給特定函式。

pd.read_sql(
    sql,             # 查詢語句
    con,             # 資料庫連線
    index_col=None,  # 索引名
)
  • sql:str or SQLAlchemy Selectable (select or text object),查詢語句
  • con:SQLAlchemy connectable, str, or sqlite3 connection,指定資料庫連線

4. 資料庫魔法命令

%load_ext sql
%sql mysql+pymysql://username:password@localhost/database_name
data = %sql select * from table_name
df = data.DataFrame()

相關文章