摘要:所處理的數組是方法可以對指定軸上的索引進行改變增加刪除操作,這將返回原始數據的一個拷貝去掉包含缺失值的行對缺失值進行填充對數據進行布爾填充五合并提供了大量的方法能夠輕松的對和對象進行各種符合各種邏輯關系的合并操作。
導入本篇中使用到的模塊:
import numpy as np import pandas as pd from pandas import Series, DataFrame
我們可以調整數據輸出框大小以便觀察:
pd.set_option("display.width", 200)
一、創建對象
1、可以通過傳遞一個list對象來創建一個Series,pandas會默認創建整型索引:
s = pd.Series([1,3,5,np.nan,6,8]) s 0 1 1 3 2 5 3 NaN 4 6 5 8 dtype: float64
2、通過傳遞一個numpy array,時間索引以及列標簽來創建一個DataFrame:
dates = pd.date_range("20130101", periods=6) df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list("ABCD")) dates df DatetimeIndex(["2013-01-01", "2013-01-02", "2013-01-03", "2013-01-04", "2013-01-05", "2013-01-06"], dtype="datetime64[ns]", freq="D") A B C D 2013-01-01 -1.857957 -0.297110 0.135704 0.199878 2013-01-02 0.139027 1.683491 -1.031190 1.447487 2013-01-03 -0.596279 -1.211098 1.169525 0.663366 2013-01-04 0.367213 -0.020313 2.169802 -1.295228 2013-01-05 0.224122 1.003625 -0.488250 -0.594528 2013-01-06 0.186073 -0.537019 -0.252442 0.530238
3、通過傳遞一個能夠被轉換成類似序列結構的字典對象來創建一個DataFrame:
df2 = pd.DataFrame({"A":1., "B":pd.Timestamp("20130102"), "C":pd.Series(1, index=list(range(4)),dtype="float32"), "D":np.array([3] * 4, dtype="int32"), "E":pd.Categorical(["test","train", "test","train"]), "F":"foo" }) df2
4、查看不同列的數據類型:
df2.dtypes A float64 B datetime64[ns] C float32 D int32 E category F object dtype: object
5、使用Tab自動補全功能會自動識別所有的屬性以及自定義的列
二、查看數據
1.查看Frame中頭部和尾部的行:
df.head() A B C D 2013-01-01 -1.857957 -0.297110 0.135704 0.199878 2013-01-02 0.139027 1.683491 -1.031190 1.447487 2013-01-03 -0.596279 -1.211098 1.169525 0.663366 2013-01-04 0.367213 -0.020313 2.169802 -1.295228 2013-01-05 0.224122 1.003625 -0.488250 -0.594528
df.tail(3) A B C D 2013-01-04 0.367213 -0.020313 2.169802 -1.295228 2013-01-05 0.224122 1.003625 -0.488250 -0.594528 2013-01-06 0.186073 -0.537019 -0.252442 0.530238
2、顯示索引、列和底層的numpy數據:
df.index DatetimeIndex(["2013-01-01", "2013-01-02", "2013-01-03", "2013-01-04", "2013-01-05", "2013-01-06"], dtype="datetime64[ns]", freq="D")
df.columns Index(["A", "B", "C", "D"], dtype="object")
3、describe()函數對于數據的快速統計匯總:
df.describe() A B C D count 6.000000 6.000000 6.000000 6.000000 mean -0.256300 0.103596 0.283858 0.158536 std 0.854686 1.060269 1.181208 0.973309 min -1.857957 -1.211098 -1.031190 -1.295228 25% -0.412452 -0.477042 -0.429298 -0.395927 50% 0.162550 -0.158711 -0.058369 0.365058 75% 0.214610 0.747641 0.911070 0.630084 max 0.367213 1.683491 2.169802 1.447487
4、對數據的轉置(tranverse):
df.T 2013-01-01 2013-01-02 2013-01-03 2013-01-04 2013-01-05 2013-01-06 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 A -1.857957 0.139027 -0.596279 0.367213 0.224122 0.186073 B -0.297110 1.683491 -1.211098 -0.020313 1.003625 -0.537019 C 0.135704 -1.031190 1.169525 2.169802 -0.488250 -0.252442 D 0.199878 1.447487 0.663366 -1.295228 -0.594528 0.530238
5、按軸進行排序:
df.sort_index(axis=1,ascending=False) D C B A 2013-01-01 0.199878 0.135704 -0.297110 -1.857957 2013-01-02 1.447487 -1.031190 1.683491 0.139027 2013-01-03 0.663366 1.169525 -1.211098 -0.596279 2013-01-04 -1.295228 2.169802 -0.020313 0.367213 2013-01-05 -0.594528 -0.488250 1.003625 0.224122 2013-01-06 0.530238 -0.252442 -0.537019 0.186073
6、按值進行排序:
df.sort(columns="B") A B C D 2013-01-03 -0.596279 -1.211098 1.169525 0.663366 2013-01-06 0.186073 -0.537019 -0.252442 0.530238 2013-01-01 -1.857957 -0.297110 0.135704 0.199878 2013-01-04 0.367213 -0.020313 2.169802 -1.295228 2013-01-05 0.224122 1.003625 -0.488250 -0.594528 2013-01-02 0.139027 1.683491 -1.031190 1.447487
三、選擇數據
以下是將要操作的數組:
df A B C D 2013-01-01 -1.857957 -0.297110 0.135704 0.199878 2013-01-02 0.139027 1.683491 -1.031190 1.447487 2013-01-03 -0.596279 -1.211098 1.169525 0.663366 2013-01-04 0.367213 -0.020313 2.169802 -1.295228 2013-01-05 0.224122 1.003625 -0.488250 -0.594528 2013-01-06 0.186073 -0.537019 -0.252442 0.530238
1、獲取數據
(1)、選擇一個多帶帶的列,這將會返回一個Series:
df["A"] 2013-01-01 -1.857957 2013-01-02 0.139027 2013-01-03 -0.596279 2013-01-04 0.367213 2013-01-05 0.224122 2013-01-06 0.186073 Freq: D, Name: A, dtype: float64
(2)、通過[]進行選擇,即:切片
df[0:3] A B C D 2013-01-01 -1.857957 -0.297110 0.135704 0.199878 2013-01-02 0.139027 1.683491 -1.031190 1.447487 2013-01-03 -0.596279 -1.211098 1.169525 0.663366
2、標簽選擇
(1)、使用標簽來獲取一個交叉的區域
df.loc[dates[0]] A -1.857957 B -0.297110 C 0.135704 D 0.199878 Name: 2013-01-01 00:00:00, dtype: float64
(2)、通過標簽來在多個軸上進行選擇
df.loc[:,["A", "B"]] A B 2013-01-01 -1.857957 -0.297110 2013-01-02 0.139027 1.683491 2013-01-03 -0.596279 -1.211098 2013-01-04 0.367213 -0.020313 2013-01-05 0.224122 1.003625 2013-01-06 0.186073 -0.537019
(3)、標簽切片
df.loc["20130102":"20130104", ["A","B"]] A B 2013-01-02 0.139027 1.683491 2013-01-03 -0.596279 -1.211098 2013-01-04 0.367213 -0.020313
(4)、對于返回的對象進行維度縮減
df.loc["20130102", ["A","B"]] A 0.139027 B 1.683491 Name: 2013-01-02 00:00:00, dtype: float64
(5)、獲取一個標量
df.loc[dates[0], "A"] -1.8579571971312099
3、位置選擇
(1)、通過傳遞數值進行位置選擇(選擇的是行)
df.iloc[3] A 0.367213 B -0.020313 C 2.169802 D -1.295228 Name: 2013-01-04 00:00:00, dtype: float64
(2)、通過數值進行切片
df.iloc[3:5,0:2] A B 2013-01-04 0.367213 -0.020313 2013-01-05 0.224122 1.003625
(3)、通過指定一個位置的列表
df.iloc[[1,2,4],[0,2]] A C 2013-01-02 0.139027 -1.031190 2013-01-03 -0.596279 1.169525 2013-01-05 0.224122 -0.488250
(4)、對行進行切片
df.iloc[1:3,:] A B C D 2013-01-02 0.139027 1.683491 -1.031190 1.447487 2013-01-03 -0.596279 -1.211098 1.169525 0.663366
(5)、獲取特定的值
df.iloc[1,1] 1.6834910794696132
4、布爾索引
(1)、使用一個多帶帶列的值來選擇數據:
df[df.A > 0] A B C D 2013-01-02 0.139027 1.683491 -1.031190 1.447487 2013-01-04 0.367213 -0.020313 2.169802 -1.295228 2013-01-05 0.224122 1.003625 -0.488250 -0.594528 2013-01-06 0.186073 -0.537019 -0.252442 0.530238
(2)、使用where操作來選擇數據:
df[df > 0] A B C D 2013-01-01 NaN NaN 0.135704 0.199878 2013-01-02 0.139027 1.683491 NaN 1.447487 2013-01-03 NaN NaN 1.169525 0.663366 2013-01-04 0.367213 NaN 2.169802 NaN 2013-01-05 0.224122 1.003625 NaN NaN 2013-01-06 0.186073 NaN NaN 0.530238
(3)、使用isin()方法來過濾:
df2 = df.copy() df2["E"] = ["one", "one", "two", "three", "four", "three"] df2 A B C D E 2013-01-01 -1.857957 -0.297110 0.135704 0.199878 one 2013-01-02 0.139027 1.683491 -1.031190 1.447487 one 2013-01-03 -0.596279 -1.211098 1.169525 0.663366 two 2013-01-04 0.367213 -0.020313 2.169802 -1.295228 three 2013-01-05 0.224122 1.003625 -0.488250 -0.594528 four 2013-01-06 0.186073 -0.537019 -0.252442 0.530238 three
df2[df2["E"].isin(["two", "four"])] A B C D E 2013-01-03 -0.596279 -1.211098 1.169525 0.663366 two 2013-01-05 0.224122 1.003625 -0.488250 -0.594528 four
5、設置
(1)、設置一個新的列:
s1 = pd.Series([1,2,3,4,5,6], index=pd.date_range("20130102", periods=6)) s1 2013-01-02 1 2013-01-03 2 2013-01-04 3 2013-01-05 4 2013-01-06 5 2013-01-07 6 Freq: D, dtype: int64
df["F"] = s1 df A B C D F 2013-01-01 0.000000 0.000000 0.135704 5 NaN 2013-01-02 0.139027 1.683491 -1.031190 5 1 2013-01-03 -0.596279 -1.211098 1.169525 5 2 2013-01-04 0.367213 -0.020313 2.169802 5 3 2013-01-05 0.224122 1.003625 -0.488250 5 4 2013-01-06 0.186073 -0.537019 -0.252442 5 5
(2)、設置新值
df.at[dates[0],"A"] = 0 #通過標簽設置新值 df.iat[0,1] = 0 #通過位置設置新值 df.loc[:, "D"] = np.array([5] * len(df)) #通過一個numpy數值設置一組新值 df A B C D F 2013-01-01 0.000000 0.000000 0.135704 5 NaN 2013-01-02 0.139027 1.683491 -1.031190 5 1 2013-01-03 -0.596279 -1.211098 1.169525 5 2 2013-01-04 0.367213 -0.020313 2.169802 5 3 2013-01-05 0.224122 1.003625 -0.488250 5 4 2013-01-06 0.186073 -0.537019 -0.252442 5 5
四、缺失值處理
在pandas中,使用np.nan來代替缺失值,這些值將默認不會包含在計算中。所處理的數組是:
df A B C D F 2013-01-01 0.000000 0.000000 0.135704 5 NaN 2013-01-02 0.139027 1.683491 -1.031190 5 1 2013-01-03 -0.596279 -1.211098 1.169525 5 2 2013-01-04 0.367213 -0.020313 2.169802 5 3 2013-01-05 0.224122 1.003625 -0.488250 5 4 2013-01-06 0.186073 -0.537019 -0.252442 5 5
1、reindex()方法可以對指定軸上的索引進行改變/增加/刪除操作,這將返回原始數據的一個拷貝:
df1 = df.reindex(index=dates[0:4],columns=list(df.columns) + ["E"]) df1.loc[dates[0]:dates[1], "E"] = 1 df1 A B C D F E 2013-01-01 0.000000 0.000000 0.135704 5 NaN 1 2013-01-02 0.139027 1.683491 -1.031190 5 1 1 2013-01-03 -0.596279 -1.211098 1.169525 5 2 NaN 2013-01-04 0.367213 -0.020313 2.169802 5 3 NaN
2、去掉包含缺失值的行:
df1.dropna(how="any") A B C D F E 2013-01-02 0.139027 1.683491 -1.03119 5 1 1
3、對缺失值進行填充:
df1.fillna(value=5) A B C D F E 2013-01-01 0.000000 0.000000 0.135704 5 5 1 2013-01-02 0.139027 1.683491 -1.031190 5 1 1 2013-01-03 -0.596279 -1.211098 1.169525 5 2 5 2013-01-04 0.367213 -0.020313 2.169802 5 3 5
4、對數據進行布爾填充:
pd.isnull(df1) A B C D F E 2013-01-01 False False False False True False 2013-01-02 False False False False False False 2013-01-03 False False False False False True 2013-01-04 False False False False False True
五、合并
pandas提供了大量的方法能夠輕松的對Series、DataFrame和Panel對象進行各種符合各種邏輯關系的合并操作。
1、Concat
df = pd.DataFrame(np.random.randn(10, 4)) df 0 1 2 3 0 0.680581 1.918851 0.521201 -0.389951 1 0.724157 2.282989 0.648427 -0.827308 2 2.437781 0.232518 1.066197 -0.233117 3 0.038747 3.174875 -1.384120 0.322864 4 -0.835962 1.015841 0.042094 -1.903701 5 0.095194 1.926612 0.512825 0.786349 6 -1.098231 -0.669381 -0.623124 -0.411114 7 -1.229527 -0.738026 0.453683 -2.037488 8 -0.499546 -0.816864 -0.395079 -0.320400 9 0.850367 1.047287 -1.205815 -1.287821
pieces = [df[:3], df[3:7], df[7:]] # break it into pieces pieces [ 0 1 2 3 0 0.680581 1.918851 0.521201 -0.389951 1 0.724157 2.282989 0.648427 -0.827308 2 2.437781 0.232518 1.066197 -0.233117, 0 1 2 3 3 0.038747 3.174875 -1.384120 0.322864 4 -0.835962 1.015841 0.042094 -1.903701 5 0.095194 1.926612 0.512825 0.786349 6 -1.098231 -0.669381 -0.623124 -0.411114, 0 1 2 3 7 -1.229527 -0.738026 0.453683 -2.037488 8 -0.499546 -0.816864 -0.395079 -0.320400 9 0.850367 1.047287 -1.205815 -1.287821]
2、Append將一行連接到一個DataFrame上
df = pd.DataFrame(np.random.randn(8, 4), columns=["A", "B", "C", "D"]) df A B C D 0 -0.923050 -1.798683 -0.543700 0.983715 1 -0.031082 1.069746 -0.761914 0.142136 2 0.178376 -0.984427 0.270601 0.737754 3 -0.882595 0.057637 -1.027661 -1.829378 4 0.570082 0.210366 0.805305 -1.233238 5 0.442322 0.709155 -0.304849 0.885378 6 -0.218852 0.052263 0.467727 0.832747 7 0.516890 0.005642 -0.990794 -1.624444
s = df.iloc[3] df.append(s, ignore_index=True) A B C D 0 -0.923050 -1.798683 -0.543700 0.983715 1 -0.031082 1.069746 -0.761914 0.142136 2 0.178376 -0.984427 0.270601 0.737754 3 -0.882595 0.057637 -1.027661 -1.829378 4 0.570082 0.210366 0.805305 -1.233238 5 0.442322 0.709155 -0.304849 0.885378 6 -0.218852 0.052263 0.467727 0.832747 7 0.516890 0.005642 -0.990794 -1.624444 8 -0.882595 0.057637 -1.027661 -1.829378
以上代碼不想自己試一試嗎?
鐳礦 raquant提供 jupyter(研究) 在線練習學習 python 的機會,無需安裝 python 即可運行 python 程序。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/45533.html
摘要:九時間序列時區表示時區轉換時區跨度轉換十畫圖圖片描述十一從版本開始,可以在中支持類型的數據。 六、分組 對于group by操作,我們通常是指以下一個或多個操作步驟:(Splitting)按照一些規則將數據分為不同的組(Applying)對于每組數據分別執行一個函數(Combining)將結果組合刀一個數據結構中將要處理的數組是: df = pd.DataFrame({ ...
摘要:時間永遠都過得那么快,一晃從年注冊,到現在已經過去了年那些被我藏在收藏夾吃灰的文章,已經太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設置私密了,不收拾不好看呀。 ...
摘要:三個常用的虛擬環境配置來匯總,如有不適之處,還望各位大佬指正。一個項目對應一個,支持開發環境與正式環境區分。其使用創建環境,以便分隔使用不同版本和不同程序包的項目。 前言 和其他大多數現代編程語言一樣,Python對包和 模塊的下載、存儲以及管理有其自己的一套方法。但是當我們同時開發多個項目工程的時候,不同的項目會將第三方的包存放在相同的路徑下。這就意味著,如果有兩個工程依賴同一個包,但是所...
閱讀 3478·2023-04-26 02:00
閱讀 3078·2021-11-22 13:54
閱讀 1699·2021-08-03 14:03
閱讀 709·2019-08-30 15:52
閱讀 3085·2019-08-29 12:30
閱讀 2420·2019-08-26 13:35
閱讀 3364·2019-08-26 13:25
閱讀 3001·2019-08-26 11:39