<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Pandas知識點(diǎn)-Series數(shù)據(jù)結(jié)構(gòu)介紹

          共 6392字,需瀏覽 13分鐘

           ·

          2021-03-05 12:16



          本文用到的數(shù)據(jù)來源于網(wǎng)易財(cái)經(jīng),具體下載方式可以參考上一篇文章:Pandas知識點(diǎn)-DataFrame數(shù)據(jù)結(jié)構(gòu)介紹


          獲取數(shù)據(jù)的鏈接為:http://quotes.money.163.com/trade/lsjysj_600519.html#01b07


          下載下來的數(shù)據(jù)是一個(gè).csv格式的文本,數(shù)據(jù)無需處理,可以直接使用,也可以直接用辦公軟件Excel打開。為了方便后面的代碼調(diào)用,下載完成后將這個(gè).csv文件拷貝到代碼的同級目錄下。


          一、Series數(shù)據(jù)結(jié)構(gòu)介紹


          1. 獲取csv文件中的一列數(shù)據(jù)


          # coding=utf-8
          import pandas as pd


          df = pd.read_csv('600519.csv', encoding='gbk')
          data = df['收盤價(jià)']
          print(data)
          print(type(data))

          數(shù)據(jù)文件是600519.csv,將此文件放到代碼同級目錄下,從文件中讀取出數(shù)據(jù),然后取其中的一列,數(shù)據(jù)如下圖。



          使用type()函數(shù)打印數(shù)據(jù)的類型,數(shù)據(jù)類型為Series。從csv文件中讀取出來的數(shù)據(jù)是DataFrame數(shù)據(jù),取其中的一列,數(shù)據(jù)是一個(gè)Series數(shù)據(jù)。


          <class 'pandas.core.series.Series'>

          2. Series數(shù)據(jù)結(jié)構(gòu)的構(gòu)成


          Series數(shù)據(jù)結(jié)構(gòu)是一種類似于一維數(shù)組的數(shù)據(jù)對象,由一組數(shù)據(jù)(numpy中的數(shù)據(jù)類型)和行索引構(gòu)成。因?yàn)閿?shù)據(jù)是一維的(只有一列),所以Series只有行索引,沒有列索引。

          Series由行索引和數(shù)據(jù)組成。如果數(shù)據(jù)行數(shù)很多,會自動將數(shù)據(jù)折疊,中間的顯示為“...”。


          與DataFrame相比,DataFrame有行索引和列索引,而Series只有行索引。取出DataFrame中的任意一列(或任意一行,行用iloc獲取,如df.iloc[0]),其數(shù)據(jù)類型都是Series,說明DataFrame是由Series構(gòu)成的。


          二、創(chuàng)建Series和DataFrame


          1. 創(chuàng)建Series


          s1 = pd.Series({'a'10'b'20'c'30'd'40})
          print(s1)
          print(type(s1))
          ?
          a    10
          b    20
          c    30
          d    40
          dtype: int64
          <class 'pandas.core.series.Series'>

          import numpy as np


          s2 = pd.Series(np.random.rand(5), index=[alpha for alpha in 'abcde'])
          print(s2)
          print(type(s2))

          a    0.269565
          b    0.520705
          c    0.419913
          d    0.182670
          e    0.031500
          dtype: float64
          <class 'pandas.core.series.Series'>

          實(shí)例化一個(gè)Pandas中的Series類對象,即可創(chuàng)建出一個(gè)Series數(shù)據(jù)。傳入Series中的數(shù)據(jù)時(shí),可以傳入一個(gè)字典,每個(gè)鍵值對的key是行索引,value是對應(yīng)的數(shù)據(jù),如上面的s1。也可以傳入一個(gè)一維數(shù)組,然后用index參數(shù)設(shè)置行索引,不設(shè)置行索引時(shí)默認(rèn)為數(shù)值型索引,即從0開始的整數(shù),如上面的s2。


          Series中保存的數(shù)據(jù)data可以是整數(shù)、浮點(diǎn)數(shù)、字符串、Python對象等類型的數(shù)據(jù)。數(shù)據(jù)data和索引index都是array-like的數(shù)據(jù),且都是一維的。此外,還可以按需指定保存的數(shù)據(jù)類型dtype,Series的命名name,是否復(fù)制已有數(shù)據(jù)copy(bool)。


          關(guān)于索引還需要注意,Pandas中的索引值是可以重復(fù)的,當(dāng)然最好不要設(shè)置重復(fù),避免在進(jìn)行一些索引不可重復(fù)的操作時(shí)出現(xiàn)錯誤。


          2. 創(chuàng)建DataFrame


          df1 = pd.DataFrame({
              'one': s2,
              'two': pd.Series(np.random.rand(4), index=[alpha for alpha in 'abcd'])
          })
          print(df1)
          print(type(df1))


                  one       two
          a  0.988763  0.592909
          b  0.093969  0.674316
          c  0.593211  0.253496
          d  0.374765  0.565424
          e  0.850890       NaN
          <class 'pandas.core.frame.DataFrame'>


          df2 = pd.DataFrame(np.random.randn(33), index=pd.date_range('1/1/2021', periods=3), columns=['one''two''three'])
          print(df2)
          print(type(df2))


                           one       two     three
          2021-01-01  0.736518 -0.012771  0.459488
          2021-01-02  0.665910  0.700380 -1.124228
          2021-01-03 -0.418457 -1.907136 -0.207422
          <class 'pandas.core.frame.DataFrame'>


          實(shí)例化一個(gè)Pandas中的DataFrame類對象,即可創(chuàng)建出一個(gè)DataFrame數(shù)據(jù)。傳入DataFrame中的數(shù)據(jù)時(shí),可以傳入一個(gè)字典,每個(gè)鍵值對是一列數(shù)據(jù),key是列索引,value是列中保存的數(shù)據(jù),每個(gè)value都是一個(gè)Series數(shù)據(jù),如上面的df1,這也再次說明DataFrame是由Series組成的。也可以傳入一個(gè)二維數(shù)組,然后用index參數(shù)和columns參數(shù)設(shè)置行索引和列索引,index和columns都是array-like的數(shù)據(jù),如上面的df2。


          同理,也可以根據(jù)需要指定保存的數(shù)據(jù)類型dtype,是否復(fù)制已有數(shù)據(jù)copy(bool)。


          DataFrame由多個(gè)Series組成,當(dāng)多個(gè)Series的長度不一樣時(shí),DataFrame中會有缺失值,Pandas中用NaN(Not a Number)表示缺失值,如上面的df1中就有一個(gè)缺失值。


          三、Series的基本屬性


          1. Series的行索引index


          df = pd.read_csv('600519.csv', encoding='gbk')
          s = df['漲跌幅']
          print(s.index)


          RangeIndex(start=0, stop=4726, step=1)


          2. Series中的數(shù)據(jù)values和array


          df = pd.read_csv('600519.csv', encoding='gbk')
          s = df['漲跌幅']
          print(s.values)
          print(type(s.values))
          print(s.array)


          ['-0.4452' '-4.9981' '5.8854' ... '-1.3022' '3.685' '13.2526']
          <class 'numpy.ndarray'>
          <PandasArray>
          ['-0.4452', '-4.9981',  '5.8854',  '3.6993',  '2.4125', '-0.3382',  '5.9792',
            '2.0937',  '1.6915', '-0.3242',
           ...
           '-2.7793', '-1.9765', '-0.0534',  '1.2706', '-0.2965', '-0.2426',  '1.9791',
           '-1.3022',   '3.685', '13.2526']
          Length: 4726, dtype: object


          values是一個(gè)ndarray對象,即一維數(shù)組,是numpy中的基本數(shù)據(jù)類型。array是一個(gè)PandasArray,是Pandas中的array數(shù)據(jù)類型。后面會專門寫文章說明他們的區(qū)別。


          3. Series的形狀shape和轉(zhuǎn)置.T


          df = pd.read_csv('600519.csv', encoding='gbk')
          s = df['漲跌幅']
          print("形狀:", s.shape)
          s2 = s.T
          print("轉(zhuǎn)置后形狀:", s2.shape)


          形狀:(4726,)
          轉(zhuǎn)置后形狀:(4726,)


          需要注意的是,Series轉(zhuǎn)置之后的形狀與轉(zhuǎn)置之前是一樣的,這是因?yàn)镾eries本身是一維的。


          四、Series的索引設(shè)置


          1. 設(shè)置Series的行索引


          df = pd.read_csv('600519.csv', encoding='gbk')
          s = df['漲跌幅'].head(3)
          print(s)
          s.index = [alpha for alpha in 'abc']
          print(s)


          0    -0.4452
          1    -4.9981
          2     5.8854
          Name: 漲跌幅, dtype: object
          a    -0.4452
          b    -4.9981
          c     5.8854
          Name: 漲跌幅, dtype: object


          Series沒有set_index()方法,如果需要修改Series的索引,可以直接對index屬性賦值。


          2. 重設(shè)索引


          s2 = s.reset_index()
          print(s2)
          print(type(s2))
          s3 = s.reset_index(drop=True)
          print(s3)
          print(type(s3))


            index      漲跌幅
          0     a  -0.4452
          1     b  -4.9981
          2     c   5.8854
          <class 'pandas.core.frame.DataFrame'>
          0    -0.4452
          1    -4.9981
          2     5.8854
          Name: 漲跌幅, dtype: object
          <class 'pandas.core.series.Series'>


          修改Series的行索引后,如果要將行索引還原成初始狀態(tài),可以使用reset_index()方法還原。在調(diào)用reset_index()時(shí),要將drop參數(shù)設(shè)置為True,否則Pandas不會刪除前面設(shè)置的行索引,而是將設(shè)置的行索引移動到數(shù)據(jù)中,使數(shù)據(jù)變成兩列,這樣數(shù)據(jù)就變成了DataFrame,而不再是Series,如上面的s2。


          以上就是Pandas中Series數(shù)據(jù)結(jié)構(gòu)的基本介紹。Series與DataFrame的很多方法是一樣的,如使用head()和tail()來顯示前n行或后n行。后面會陸續(xù)介紹更多相關(guān)的屬性和方法。


          如果不想自己下載數(shù)據(jù),可以點(diǎn)擊關(guān)注公眾號“Python碎片”,然后在后臺回復(fù)“pandas02”關(guān)鍵字獲取本文代碼和數(shù)據(jù)。


          有興趣的朋友,可以長按下方二維碼加號主binn.wong為好友,可以加入【Python碎片】交流群一起交流,期待您的加入。

          瀏覽 70
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  精品大香蕉在线视频 | 先锋影音AV资源网站 | 免费视频一区二区 | 黄色片黄色片一级片不卡片 | 成人网站在线视频三级 |