日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Pandas文件讀寫操作

作者:Begin to change 更新時間: 2022-07-21 編程語言

文件操作:

Pandas中提供了許多的操作文件的函數,包括讀取和寫入。我們做數據分析用得最多的,就是CSV、Excel、SQL、JSON文件。下面來針對這幾種文件的操作做一個詳細的講解。

CSV文件操作:

讀寫CSV文件分別用的是pd.read_csvpd.to_csv方法。普通用法非常簡單,但是通過一些參數,可以實現許多高級操作。

1. 讀取csv:

讀取csv用的是pd.read_csv,主要有以下參數:

  1. filepath_or_buffer:文件路徑,或者是有read方法的流對象。
  2. sep:分隔符,默認是,。
  3. header:指定哪行作為列的名稱,如果沒有行作為列名,那么應該設置header=None,并且設置names參數。
  4. names:在csv文件中沒有一行來存儲列名,可以使用names自己指定,并且設置header=None。
  5. index_col:使用哪一列作為行索引,可以是列的位置,也可以是列的名稱。如果沒有指定,那么默認會自動生成一個順序索引。
  6. usecols:加載哪幾列。比如有時候只想要csv文件中的某幾列,那么就可以使用usecols。也可以是個函數,這個函數返回True的列會被保留,否則會丟棄。
  7. engine:csv解析引擎,有C和Python,C速度更快,但是Python功能更完善。
  8. dtype:指定某些列的類型。
  9. converters:轉換器列表,可以指定每一列在加載的時候就轉換為指定的類型。
  10. encoding:使用指定的編碼方式打開文件。
  11. chunksize:使用迭代器的方式讀取,一次返回多少行的數據。

更多參數請查看Pandas官網read_csv:https://pandas.pydata.org/docs/user_guide/io.html#io-read-csv-table

2. 寫入csv:

寫入csv用的是pd.to_csvSeriesDataFrame都可以使用這個方法。主要有以下參數:

  1. path_or_buf:寫入的文件路徑、緩存或者是文件對象,如果是文件對象,那么這個文件對象在打開的時候必須指定newline=''。
  2. sep:存儲成csv文件格式化的分隔符。
  3. na_repNAN值的替代字符串,默認是空的。
  4. float_format:格式化浮點類型字符串。
  5. columns:哪些列需要寫入到csv文件中。
  6. header:是否把列的名稱也寫入進去,默認為True。
  7. index:是否把行索引名稱也寫入進去,默認為True。
  8. encoding:存儲的csv文件編碼方式。
  9. chunksize:一次性寫入多少行。

更多的參數請查看Pandas官網to_csv:https://pandas.pydata.org/docs/user_guide/io.html#io-store-in-csv

Excel文件操作:

1. 讀取Excel:

讀取Excel文件用的是pd.read_excel方法。因為Excel文件有兩種類型,分別是2007年后的.xlsx和2003年的.xls。其中.xlsx需要借助openpyxl庫,.xls需要借助xlrd庫。如果這兩個庫沒有安裝,在運行的時候可能會報錯,因此可以提前通過以下命令安裝:

$ pip install openpyxl
$ pip install xlrd

下面來講解一下pd.read_excel的基本用法。先看一個最簡單的示例代碼:

pd.read_excel("path_to_file.xls", sheet_name="Sheet1")

首先指定Excel文件路徑,然后通過sheet_name參數指定讀取Excel文件的哪個Sheet。如果Excel的Sheet比較多,那么我們可以先使用ExcelFile類把所有Sheet都讀取出來,再使用pd.read_excel分別讀取。這種方式比直接直接多次使用pd.read_excel效率更高。示例代碼如下:

xlsx = pd.ExcelFile("path_to_file.xls")
df = pd.read_excel(xlsx, "Sheet1")

或者是:

with pd.ExcelFile("path_to_file.xls") as xls:
    df1 = pd.read_excel(xls, "Sheet1")
    df2 = pd.read_excel(xls, "Sheet2")

pd.read_excel的其他參數,除了沒有chunksize外,與pd.read_csv相同。

更多pd.read_excel的用法,請參考Pandas官方文檔:https://pandas.pydata.org/docs/user_guide/io.html#io-excel-reader

2. 寫入Excel:

寫入Excel用的是pd.to_excel方法,使用方法與pd.to_csv非常的類似,但是可以指定sheet_name參數。并且官方強烈建議使用openpyxl庫作為引擎,將數據保存保存為xlsx文件,如果使用xlwt庫將數據保存為xls文件,出現問題官方是不會負責修復的,因為已經不支持了(具體可以看:https://pandas.pydata.org/docs/user_guide/io.html#excel-files)。
基本用法如下:

df.to_excel("path_to_file.xlsx", sheet_name="Sheet1")

也可以使用ExcelWriter類,寫入多個DataFrame到多個Sheet中。示例代碼如下:

with pd.ExcelWriter("path_to_file.xlsx") as writer:
    df1.to_excel(writer, sheet_name="Sheet1")
    df2.to_excel(writer, sheet_name="Sheet2")

更多pd.to_excel的用法,請參考Pandas官方文檔:https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_excel.html#pandas.DataFrame.to_excel

SQL操作:

操作SQL主要有以下幾個函數:

  1. read_sql_table(table_name, conn, ...):用于讀取一張表中的數據。
  2. read_sql_query(sql, con, ...):執行SQL語句,讀取到DataFrame中。
  3. read_sql(sql_or_tablename, con, ...)read_sql_tableread_sql_query兩者結合,會自動判斷第一個參數是否為表名還是sql語句。
  4. DataFrame.to_sql(name, con, ...):將DataFrame數據寫入到數據庫中。name指定一個表名。

操作SQL需要借助SQLAlchemy,如果沒有安裝,則需要通過pip install sqlalchemy安裝一下。使用SQLAlchemy連接數據庫,會根據不同的數據庫,使用不同的連接方式。

  1. SQLite"sqlite:///[database name].db"
  2. MySQL"mysql+pymysql://[username]:[password]@[host]:[port]/[database name]?charset=utf8"
  3. PostgreSQL"postgresql://[username]:[password]@[host]:[port]/[database name]"
  4. Oracle"oracle://scott:tiger@127.0.0.1:1521/sidname"

這里我們以sqlite為例來講解上述方法的使用。

1. 寫入SQL:

為了方便演示SQL操作,我們先使用to_sql,將一個DataFrame數據寫入到數據庫中。示例代碼如下:

# 讀取excel中的數據
df = pd.read_excel("data/salesfunnel.xlsx")

# 創建數據庫連接
from sqlalchemy import create_engine
engine = create_engine("sqlite:///salessfunnel.db")

# 將df數據,寫入到sqlite數據庫中,并且表名為funnel
df.to_sql("funnel", engine, index=False)

2. read_sql_table讀取表數據:

使用read_sql_table可以將指定表中所有的數據都讀取出來(當然也可以使用chunksize來分段讀取)。示例代碼如下:

funnel = pd.read_sql_table("funnel", engine)

如果使用chunksize參數,那么將返回一個生成器??梢匝h獲取里面的數據,示例代碼如下:

funnel = pd.read_sql_table("funnel", engine, chunksize=3)
for chunk in funnel:
    print(chunk)

在循環funnel的時候,每個chunk都是含有三條數據的DataFrame對象。

3. read_sql_query執行SQL查詢語句:

在獲取數據的時候,如果需要過濾數據,或者是多表查詢,那么可以使用read_sql_query來執行sql語句。示例代碼如下:

df2 = pd.read_sql_query("select Account, Name from funnel where Product='CPU'", engine)
print(df2)

輸出結果如下:

        Account	Name
0	714466	Trantow-Barrows
1	737550	Fritsch, Russel and Anderson
2	146832	Kiehn-Spinka
3	218895	Kulas Inc
4	740150	Barton LLC
5	141962	Herman LLC
6	163416	Purdy-Kunde
7	688981	Keeling LLC
8	729833	Koepp Ltd

4. read_sql讀取數據:

read_sql是結合了read_sql_tableread_sql_query兩者的功能。既可以從表中讀取數據,也可以執行查詢SQL語句。示例代碼如下:

# 讀取表數據
funnel = pd.read_sql("funnel", engine)
# 執行查詢SQL語句
funnel = pd.read_sql("select Account, Name from funnel where Product='CPU'", engine)

更多:

更多其他文件操作,請參考Pandas官網:https://pandas.pydata.org/docs/user_guide/io.html

原文鏈接:https://blog.csdn.net/qq_41404557/article/details/125898468

欄目分類
最近更新