[python][pandas]DataFrame的基本操作


問題來源

在實驗中經常需要將數據保存到易於查看的文件當中,由於大部分都是vector數據,所以選擇pandas的dataframe來保存到csv文件是最簡單的方法。

基本操作

下圖是DataFrame的一些基本概念,可以看出與基本的csv結構是保持一致的。

1. 創建DataFrame

創建DataFrame通常有兩種方法,從list中創建和從dict中創建:

  • 從dict創建,key的名字會作為名,如下所示:

    >>> d = {'col1': [1, 2], 'col2': [3, 4]}
    >>> df = pd.DataFrame(data=d)
    >>> df
       col1  col2
    0     1     3
    1     2     4
    
  • 從list創建, 列名會以[0,n]來顯示:

    >>> d = [2, 3, 4, 5]
    >>> df = pd.DataFrame(data=d)
    >>> df
      0
    0 2
    1 3
    2 4
    3 5
    

    當然也可以指定列名:

    >>> df2 = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),
    ...                    columns=['a', 'b', 'c'])
    >>> df2
       a  b  c
    0  1  2  3
    1  4  5  6
    2  7  8  9
    

note:對於不帶小數點的數字,df默認的datatype為int64,如果需要修改datatype,那么需要在創建的時候聲明datatype:

>>> df = pd.DataFrame(data=d, dtype=np.int8)

2. 行列選擇

行列查找,可以分為單行/列查找和多行/列查找,思路都一樣。

單/多行查找是通過loc函數進行查找的,例子如下:

>>> data = pd.read_csv("nba.csv", index_col ="Name")
>>> data.loc["Avery Bradley"]) # 查找一行
>>> data.loc[["Avery Bradley","R.J. Hunter"]] #查找多行

需要注意的是,先對數據進行索引,默認的索引為[0,n]。

單/多列的查找更簡單一些,可以直接使用下標的方式來進行查找,猜測在df內部存儲的方式是以列優先的。例子如下:

>>> data = {'Name':['Jai', 'Princi', 'Gaurav', 'Anuj'],
      'Age':[27, 24, 22, 32],
      'Address':['Delhi', 'Kanpur', 'Allahabad', 'Kannauj'],
      'Qualification':['Msc', 'MA', 'MCA', 'Phd']}
>>> df = pd.DataFrame(data)
>>> df['Name'] # 查找為Name一列的所有數據
>>> df[['Name','Address']] #查找Name和Address的數據

通過索引下標查找,通過數組下標來查找,可以通過iloc方法來查找,例子如下:

>>> data = pd.read_csv("nba.csv", index_col ="Name")
>>> row2 = data.iloc[3]  # 查找第4行
>>> row2 = data.iloc [[3, 5, 7]]  # 查找多行

查找分塊矩陣也類似於上訴的方法,例子如下:

>>> data = pd.read_csv("nba.csv", index_col ="Name")
>>> row2 = data.iloc[[3, 4], [1, 2]]
>>> row2 = data.iloc [:, [1, 2]]

3. 調整行號

如果是使用dict生成的df,那么其對應的列的順序是按照字母序進行排列的,這時需要進行按添加順序進行排序。可以通過以下方式調整順序:

>>> data = {'Name':['Jai', 'Princi', 'Gaurav', 'Anuj'],
      'Age':[27, 24, 22, 32],
      'Address':['Delhi', 'Kanpur', 'Allahabad', 'Kannauj'],
      'Qualification':['Msc', 'MA', 'MCA', 'Phd']}
>>> df = pd.DataFrame(data)
>>> df = df[['Name','Age','Address','Qualification']]

當然還有一些需求,比如需要修改行的編號,修改行號為日期,那么可以使用下面的方法:

>>> df = pd.DataFrame(data)
>>> df.index = df.index + 1 #行號從1開始
>>> df.index = pd.date_range('20190101',periods=len(df))  #行號為日期

引用

[1]. https://www.geeksforgeeks.org/python-pandas-dataframe/

[2]. https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html


免責聲明!

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



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