天天看點

pandas系列1_對象建立及檢視資料

本文重點知識:

  • 建立帶有日期的索引:

    dates = pd.date_range('20190924', periods=6)

  • head()、tail()
  • 按軸排序:索引排序

    sort_index

    ,預設是

    ascending=True

    升序
    • axis=0:行索引,可以用

      index

    • axis=1:列索引,可以用

      columns

  • 按值排序:

    df.sort_values(by='columns')

    ,預設升序

建立資料

import numpy as np
import pandas as pd           

複制

s = pd.Series([1, 3, 5, np.nan, 6, 89])
s           

複制

0     1.0
1     3.0
2     5.0
3     NaN
4     6.0
5    89.0
dtype: float64           

複制

dates = pd.date_range('20190924', periods=6)
dates           

複制

DatetimeIndex(['2019-09-24', '2019-09-25', '2019-09-26', '2019-09-27',
               '2019-09-28', '2019-09-29'],
              dtype='datetime64[ns]', freq='D')           

複制

df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list("ABCD"))
df           

複制

A B C D
2019-09-24 0.500005 0.166578 -0.758513 -0.679173
2019-09-25 0.090209 0.117906 -0.402183 2.261182
2019-09-26 -0.809052 -0.173144 0.324912 -1.885101
2019-09-27 0.310374 -1.502089 1.524401 0.269953
2019-09-28 -0.846488 -0.235878 1.398896 -0.229573
2019-09-29 0.975853 -0.998395 -0.514480 -0.882704
# 同時建立多個不同的列
df2 = pd.DataFrame({'A': 1.,   #  某列的值相同
                    'B': pd.Timestamp('20130102'),  # 時間戳的建立
                    'C': pd.Series(1, index=list(range(4)), dtype='float32'),  # 某列值可以是S型資料
                    'D': np.array([3] * 4, dtype='int32'),  # 使用numpy數組
                    'E': pd.Categorical(["test", "train", "test", "train"]), # 不同的類
                    'F': 'foo'})  # 使用布爾值

df2           

複制

A B C D E F
1.0 2013-01-02 1.0 3 test foo
1 1.0 2013-01-02 1.0 3 train foo
2 1.0 2013-01-02 1.0 3 test foo
3 1.0 2013-01-02 1.0 3 train foo
df2.dtypes           

複制

A           float64
B    datetime64[ns]
C           float32
D             int32
E          category
F            object
dtype: object           

複制

檢視資料

檢視資料的相關資訊

  • 頭、尾幾行資料
  • index、columns
  • describe ,T
# 前幾行資料,預設是5行
df.head(3)           

複制

A B C D
2019-09-24 0.500005 0.166578 -0.758513 -0.679173
2019-09-25 0.090209 0.117906 -0.402183 2.261182
2019-09-26 -0.809052 -0.173144 0.324912 -1.885101
# 檢視末幾行,預設是5行
df.tail(2)           

複制

A B C D
2019-09-28 -0.846488 -0.235878 1.398896 -0.229573
2019-09-29 0.975853 -0.998395 -0.514480 -0.882704
# 檢視資料的行索引
df.index           

複制

DatetimeIndex(['2019-09-24', '2019-09-25', '2019-09-26', '2019-09-27',
               '2019-09-28', '2019-09-29'],
              dtype='datetime64[ns]', freq='D')           

複制

# 檢視資料的列屬性
df.columns           

複制

Index(['A', 'B', 'C', 'D'], dtype='object')           

複制

df.to_numpy()           

複制

array([[ 0.50000505,  0.16657823, -0.75851253, -0.67917279],
       [ 0.09020909,  0.11790626, -0.40218323,  2.26118249],
       [-0.80905211, -0.17314443,  0.32491161, -1.88510066],
       [ 0.31037417, -1.50208882,  1.52440064,  0.26995285],
       [-0.8464884 , -0.23587797,  1.39889574, -0.22957318],
       [ 0.9758533 , -0.99839501, -0.51448041, -0.88270375]])           

複制

df.describe()           

複制

A B C D
count 6.000000 6.000000 6.000000 6.000000
mean 0.036817 -0.437504 0.262172 -0.190903
std 0.730717 0.668113 0.997562 1.400993
min -0.846488 -1.502089 -0.758513 -1.885101
25% -0.584237 -0.807766 -0.486406 -0.831821
50% 0.200292 -0.204511 -0.038636 -0.454373
75% 0.452597 0.045144 1.130400 0.145071
max 0.975853 0.166578 1.524401 2.261182
df.T           

複制

2019-09-24 00:00:00 2019-09-25 00:00:00 2019-09-26 00:00:00 2019-09-27 00:00:00 2019-09-28 00:00:00 2019-09-29 00:00:00
A 0.500005 0.090209 -0.809052 0.310374 -0.846488 0.975853
B 0.166578 0.117906 -0.173144 -1.502089 -0.235878 -0.998395
C -0.758513 -0.402183 0.324912 1.524401 1.398896 -0.514480
D -0.679173 2.261182 -1.885101 0.269953 -0.229573 -0.882704
# sort_index
# 索引排序`sort_index`,預設是`ascending=True`升序
# axis=0:行索引,可以用`index`
# axis=1:列索引,可以用`columns`
df.sort_index(axis=1)           

複制

A B C D
2019-09-24 0.500005 0.166578 -0.758513 -0.679173
2019-09-25 0.090209 0.117906 -0.402183 2.261182
2019-09-26 -0.809052 -0.173144 0.324912 -1.885101
2019-09-27 0.310374 -1.502089 1.524401 0.269953
2019-09-28 -0.846488 -0.235878 1.398896 -0.229573
2019-09-29 0.975853 -0.998395 -0.514480 -0.882704
# 按照行索引進行降序
df.sort_index(axis=0, ascending=False)           

複制

A B C D
2019-09-29 0.975853 -0.998395 -0.514480 -0.882704
2019-09-28 -0.846488 -0.235878 1.398896 -0.229573
2019-09-27 0.310374 -1.502089 1.524401 0.269953
2019-09-26 -0.809052 -0.173144 0.324912 -1.885101
2019-09-25 0.090209 0.117906 -0.402183 2.261182
2019-09-24 0.500005 0.166578 -0.758513 -0.679173
# 按照某個屬性進行排序
# 按照B屬性的升序排列
df.sort_values(by="B")           

複制

A B C D
2019-09-27 0.310374 -1.502089 1.524401 0.269953
2019-09-29 0.975853 -0.998395 -0.514480 -0.882704
2019-09-28 -0.846488 -0.235878 1.398896 -0.229573
2019-09-26 -0.809052 -0.173144 0.324912 -1.885101
2019-09-25 0.090209 0.117906 -0.402183 2.261182
2019-09-24 0.500005 0.166578 -0.758513 -0.679173
df.sort_values(by=["B","C"])           

複制

A B C D
2019-09-27 0.310374 -1.502089 1.524401 0.269953
2019-09-29 0.975853 -0.998395 -0.514480 -0.882704
2019-09-28 -0.846488 -0.235878 1.398896 -0.229573
2019-09-26 -0.809052 -0.173144 0.324912 -1.885101
2019-09-25 0.090209 0.117906 -0.402183 2.261182
2019-09-24 0.500005 0.166578 -0.758513 -0.679173

選擇資料

檢視指定的行列資料

# 指定列屬性檢視資料
df[["B","C"]]           

複制

B C
2019-09-24 0.166578 -0.758513
2019-09-25 0.117906 -0.402183
2019-09-26 -0.173144 0.324912
2019-09-27 -1.502089 1.524401
2019-09-28 -0.235878 1.398896
2019-09-29 -0.998395 -0.514480
# 指定行标簽檢視指定的行資料
df[1:3]           

複制

A B C D
2019-09-25 0.090209 0.117906 -0.402183 2.261182
2019-09-26 -0.809052 -0.173144 0.324912 -1.885101
df["20190924":"20190927"]           

複制

A B C D
2019-09-24 0.500005 0.166578 -0.758513 -0.679173
2019-09-25 0.090209 0.117906 -0.402183 2.261182
2019-09-26 -0.809052 -0.173144 0.324912 -1.885101
2019-09-27 0.310374 -1.502089 1.524401 0.269953

loc

根據标簽(不是自帶的數字索引)檢視資料

df.loc[dates[0]]           

複制

A    0.500005
B    0.166578
C   -0.758513
D   -0.679173
Name: 2019-09-24 00:00:00, dtype: float64           

複制

dates[0]           

複制

Timestamp('2019-09-24 00:00:00', freq='D')           

複制

# 選擇行和列
df.loc[:, ["A","B"]]   # 選擇所有行和AB兩個列           

複制

A B
2019-09-24 0.500005 0.166578
2019-09-25 0.090209 0.117906
2019-09-26 -0.809052 -0.173144
2019-09-27 0.310374 -1.502089
2019-09-28 -0.846488 -0.235878
2019-09-29 0.975853 -0.998395
# 索引通過标簽來實作
df.loc['20190924':'20190927', ['A', 'B']]           

複制

A B
2019-09-24 0.500005 0.166578
2019-09-25 0.090209 0.117906
2019-09-26 -0.809052 -0.173144
2019-09-27 0.310374 -1.502089
# 指定的行或者列可以是切片形式
df.loc['20190924':'20190927', 'A':'B']           

複制

A B
2019-09-24 0.500005 0.166578
2019-09-25 0.090209 0.117906
2019-09-26 -0.809052 -0.173144
2019-09-27 0.310374 -1.502089

iloc數字索引

記憶放法:

iloc

記為

intloc

,int為整型,表示通過數字來進行索引

df           

複制

A B C D
2019-09-24 0.500005 0.166578 -0.758513 -0.679173
2019-09-25 0.090209 0.117906 -0.402183 2.261182
2019-09-26 -0.809052 -0.173144 0.324912 -1.885101
2019-09-27 0.310374 -1.502089 1.524401 0.269953
2019-09-28 -0.846488 -0.235878 1.398896 -0.229573
2019-09-29 0.975853 -0.998395 -0.514480 -0.882704
df.iloc[1:3]           

複制

A B C D
2019-09-25 0.090209 0.117906 -0.402183 2.261182
2019-09-26 -0.809052 -0.173144 0.324912 -1.885101
df.iloc[1:3, 0:2]  # 切片形式,連續性           

複制

A B
2019-09-25 0.090209 0.117906
2019-09-26 -0.809052 -0.173144
df.iloc[[1, 2, 4], [0, 2]]  # 行索引是離散的值           

複制

A C
2019-09-25 0.090209 -0.402183
2019-09-26 -0.809052 0.324912
2019-09-28 -0.846488 1.398896
df.iloc[:, 1:3]           

複制

B C
2019-09-24 0.166578 -0.758513
2019-09-25 0.117906 -0.402183
2019-09-26 -0.173144 0.324912
2019-09-27 -1.502089 1.524401
2019-09-28 -0.235878 1.398896
2019-09-29 -0.998395 -0.514480

擷取具體位置的元素

df.iloc[1,2]           

複制

-0.4021832300071616           

複制

df.iat[1,2]    # 等同上面           

複制

-0.4021832300071616           

複制

布爾索引

df           

複制

A B C D
2019-09-24 0.500005 0.166578 -0.758513 -0.679173
2019-09-25 0.090209 0.117906 -0.402183 2.261182
2019-09-26 -0.809052 -0.173144 0.324912 -1.885101
2019-09-27 0.310374 -1.502089 1.524401 0.269953
2019-09-28 -0.846488 -0.235878 1.398896 -0.229573
2019-09-29 0.975853 -0.998395 -0.514480 -0.882704
df[df.A > 0]  # 将屬性A中大于0的行全部選擇出出來           

複制

A B C D
2019-09-24 0.500005 0.166578 -0.758513 -0.679173
2019-09-25 0.090209 0.117906 -0.402183 2.261182
2019-09-27 0.310374 -1.502089 1.524401 0.269953
2019-09-29 0.975853 -0.998395 -0.514480 -0.882704
df[df > 0]           

複制

A B C D
2019-09-24 0.500005 0.166578 NaN NaN
2019-09-25 0.090209 0.117906 NaN 2.261182
2019-09-26 NaN NaN 0.324912 NaN
2019-09-27 0.310374 NaN 1.524401 0.269953
2019-09-28 NaN NaN 1.398896 NaN
2019-09-29 0.975853 NaN NaN NaN
pandas系列1_對象建立及檢視資料