国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python數據分析入門之pandas總結基礎(一)

alanoddsoff / 3425人閱讀

摘要:整個序列級別的元數據信息當數據序列以及本身有了名字,就可以更方便的進行后續的數據關聯啦這里我感覺就是列名的作用。數據分析入門之總結基礎二歡迎來翔的博客查看完成版。

一. Series

Series: pandas的長槍(數據表中的一列或一行,觀測向量,一維數組...)

Series1 = pd.Series(np.random.randn(4))

print Series1,type(Series1) 

print Series1.index

print Series1.values

輸出結果:

0   -0.676256

1    0.533014

2   -0.935212

3   -0.940822

dtype: float64 

Int64Index([0, 1, 2, 3], dtype="int64")

[-0.67625578  0.53301431 -0.93521212 -0.94082195]

np.random.randn() 正態分布相關。函數說明

Series?持過濾的原理就如同NumPy
print Series1>0 

print Series1[Series1>0]

輸出結果如下:

0 0.030480

1 0.072746

2 -0.186607

3 -1.412244

dtype: float64 

Int64Index([0, 1, 2, 3], dtype="int64")

[ 0.03048042 0.07274621 -0.18660749 -1.41224432]

我發現,邏輯表達式,獲得的值就是True或者False。要先取得值,還是要X[y]的形式。

當然也支持廣播Broadcasting

什么是broadcasting,暫時我也不太清楚,看個栗子:

print Series1*2 

print Series1+5

輸出結果如下:

0 0.06096

1 1 0.145492 

2 -0.373215 

3 -2.824489 

dtype: float64 

0 5.030480 

1 5.072746 

2 4.813393 

3 3.587756 

dtype: float64
以及Universal Function

numpy.frompyfunc(out,nin,nout) 返回的是一個函數,nin是輸入的參數個數,nout是函數返回的對象的個數函數說明

在序列上就使用行標,而不是創建1個2列的數據表,能夠輕松辨別哪是數據,哪是元數據

這句話的意思,我的理解是序列盡量是一列,不用去創建2列,這樣子,使用index就能指定數據了`

Series2 = pd.Series(Series1.values,index=["norm_"+unicode(i) for i in xrange(4)])

print Series2,type(Series2)

print Series2.index

print type(Series2.index)

print Series2.values

輸出結果如下,可以看到,它是通過修改了index值的樣式,并沒有創建2列。

norm_0   -0.676256

norm_1    0.533014

norm_2   -0.935212

norm_3   -0.940822

dtype: float64 

Index([u"norm_0", u"norm_1", u"norm_2", u"norm_3"], dtype="object")



[-0.67625578  0.53301431 -0.93521212 -0.94082195]

雖然行是有順序的,但是仍然能夠通過行級的index來訪問到數據:

(當然也不盡然像Ordered Dict,因為?索引甚?可以重復,不推薦重復的行索引不代表不能用)

print Series2[["norm_0","norm_3"]]

可以看到,讀取數據時,確實要采用X[y]的格式。這里X[[y]]是因為,它要讀取兩個數據,指定的是這兩個數據的index值,將index值存放進list中,然后讀取。輸出結果如下:

norm_0   -0.676256

norm_3   -0.940822

dtype: float64

再比如:

print "norm_0" in Series2

print "norm_6" in Series2

輸出結果:

True

False

邏輯表達式的輸出結果,布爾型值。

從Key不重復的Ordered Dict或者從Dict來定義Series就不需要擔心行索引重復:
Series3_Dict = {"Japan":"Tokyo","S.Korea":"Seoul","China":"Beijing"}

Series3_pdSeries = pd.Series(Series3_Dict)

print Series3_pdSeries

print Series3_pdSeries.values

print Series3_pdSeries.index

輸出結果:

China Beijing

Japan Tokyo

S.Korea Seoul

dtype: object

["Beijing" "Tokyo" "Seoul"]

Index([u"China", u"Japan", u"S.Korea"], dtype="object")

通過上面的輸出結果就知道了,輸出結果是無序的,和輸入順序無關。

想讓序列按你的排序?式保存?就算有缺失值都毫無問題

Series4_IndexList = ["Japan","China","Singapore","S.Korea"]

Series4_pdSeries = pd.Series( Series3_Dict ,index = Series4_IndexList)

print Series4_pdSeries

print Series4_pdSeries.values

print Series4_pdSeries.index

print Series4_pdSeries.isnull()

print Series4_pdSeries.notnull()

上面這樣的輸出就會按照list中定義的順序輸出結果。

整個序列級別的元數據信息:name

當數據序列以及index本身有了名字,就可以更方便的進行后續的數據關聯啦!

這里我感覺就是列名的作用。下面舉例:

print Series4_pdSeries.name

print Series4_pdSeries.index.name

很顯然,輸出的結果都是None,因為我們還沒指定name嘛!

Series4_pdSeries.name = "Capital Series"

Series4_pdSeries.index.name = "Nation"

print Series4_pdSeries

輸出結果:

Nation

Japan Tokyo

China Beijing

Singapore NaN

S.Korea Seoul

Name: Capital Series, dtype: object

"字典"?不是的,?index可以重復,盡管不推薦。

Series5_IndexList = ["A","B","B","C"]

Series5 = pd.Series(Series1.values,index = Series5_IndexList)

print Series5

print Series5[["B","A"]]

輸出結果:

A 0.030480

B 0.072746

B -0.186607

C -1.412244

dtype: float64

B 0.072746

B -0.186607

A 0.030480

dtype: float64

我們可以看出,Series["B"]輸出了兩個值,所以index值盡量不要重復呀!

二. DataFrame

DataFrame:pandas的戰錘(數據表,?維數組)

Series的有序集合,就像R的DataFrame一樣方便。

仔細想想,絕大部分的數據形式都可以表現為DataFrame。

從NumPy二維數組、從文件或者從數據庫定義:數據雖好,勿忘列名
dataNumPy = np.asarray([("Japan","Tokyo",4000),("S.Korea","Seoul",1300),("China","Beijing",9100)])

DF1 = pd.DataFrame(dataNumPy,columns=["nation","capital","GDP"])

DF1

這里DataFrame中的columns應該就是列名的意思?,F在看print的結果,是不是很舒服??!Excel的樣式嘛

等長的列數據保存在一個字典里(JSON):很不幸,字典key是無序的
dataDict = {"nation":["Japan","S.Korea","China"],"capital":["Tokyo","Seoul","Beijing"],"GDP":[4900,1300,9100]}

DF2 = pd.DataFrame(dataDict)

DF2

輸出結果可以發現,無序的!

GDP    capital    nation

0 4900 Tokyo Japan

1 1300 Seoul S.Korea

2 9100 Beijing China

PS:由于懶得截圖放過來,這里沒有了邊框線。

從另一個DataFrame定義DataFrame:啊,強迫癥犯了!
DF21 = pd.DataFrame(DF2,columns=["nation","capital","GDP"])

DF21

很明顯,這里是利用DF2定義DF21,還通過指定cloumns改變了列名的順序。

DF22 = pd.DataFrame(DF2,columns=["nation","capital","GDP"],index = [2,0,1])

DF22

很明顯,這里定義了columns的順序,還定義了index的順序。

nation capital GDP

2 China Beijing 9100

0 Japan Tokyo 4900

1 S.Korea Seoul 1300
從DataFrame中取出列?兩種方法(與JavaScript完全一致?。?/b>

OMG,囧,我竟然都快忘了js語法了,現在想起了,但是對象的屬性既可以obj.x也可以obj[x]。

"."的寫法容易與其他預留關鍵字產生沖突

"[ ]"的寫法最安全。

從DataFrame中取出行?(至少)兩種?法:

方法1和方法2:

print DF22[0:1] #給出的實際是DataFrame

print DF22.ix[0] #通過對應Index給出?,**ix**好爽。

輸出結果:

 nation  capital   GDP

2  China  Beijing  9100

nation     Japan

capital    Tokyo

GDP         4900

Name: 0, dtype: object

方法3 像NumPy切片一樣的終極招式:iloc

print DF22.iloc[0,:]    #第一個參數是第幾行,第二個參數是列。這里呢,就是第0行,全部列

print DF22.iloc[:,0]    #根據上面的描述,這里是全部行,第0列

輸出結果,驗證一下:

nation       China

capital    Beijing

GDP           9100

Name: 2, dtype: object

2      China

0      Japan

1    S.Korea

Name: nation, dtype: object
動態增加列列,但是無法用"."的方式,只能用"[]"

舉個栗子說明一下就明白了:

DF22["population"] = [1600,130,55]

DF22

輸出結果:

nation    capital    GDP    population

2    China    Beijing    9100    1600

0    Japan    Tokyo    4900    130

1    S.Korea    Seoul    1300    55
三. Index:行級索引

Index:pandas進?數據操縱的鬼牌(行級索引)

?級索引是:

元數據

可能由真實數據產生,因此可以視作數據

可以由多重索引也就是多個列組合而成

可以和列名進行交換,也可以進行堆疊和展開,達到Excel透視表效果

Index有四種...哦不,很多種寫法,?些重要的索引類型包括:

pd.Index(普通)

Int64Index(數值型索引)

MultiIndex(多重索引,在數據操縱中更詳細描述)

DatetimeIndex(以時間格式作為索引)

PeriodIndex (含周期的時間格式作為索引)

直接定義普通索引,長得就和普通的Series?樣
index_names = ["a","b","c"]

Series_for_Index = pd.Series(index_names)

print pd.Index(index_names)

print pd.Index(Series_for_Index)

輸出結果:

Index([u"a", u"b", u"c"], dtype="object")

Index([u"a", u"b", u"c"], dtype="object")

可惜Immutable,牢記! 不可變!舉例如下:此處挖坑啊。不明白……

index_names = ["a","b","c"] 

index0 = pd.Index(index_names) 

print index0.get_values() 

index0[2] = "d"

輸出結果如下:

["a" "b" "c"]

---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

 in ()

      2 index0 = pd.Index(index_names)

      3 print index0.get_values()

----> 4 index0[2] = "d"



C:Anacondalibsite-packagespandascoreindex.pyc in __setitem__(self, key, value)

   1055 

   1056     def __setitem__(self, key, value):

-> 1057         raise TypeError("Indexes does not support mutable operations")

   1058 

   1059     def __getitem__(self, key):



TypeError: Indexes does not support mutable operations
扔進去一個含有多元組的List,就有了MultiIndex

可惜,如果這個List Comprehension改成小括號,就不對了。

multi1 = pd.Index([("Row_"+str(x+1),"Col_"+str(y+1)) for x in xrange(4) for y in xrange(4)])

multi1.name = ["index1","index2"]

print multi1

輸出結果:

MultiIndex(levels=[[u"Row_1", u"Row_2", u"Row_3", u"Row_4"], [u"Col_1", u"Col_2", u"Col_3", u"Col_4"]],

           labels=[[0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3], [0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]])
對于Series來說,如果擁有了多重Index,數據,變形!

下列代碼說明:

二重MultiIndex的Series可以unstack()成DataFrame

DataFrame可以stack成擁有?重MultiIndex的Series

data_for_multi1 = pd.Series(xrange(0,16),index=multi1)

data_for_multi1

輸出結果:

Row_1  Col_1     0

       Col_2     1

       Col_3     2

       Col_4     3

Row_2  Col_1     4

       Col_2     5

       Col_3     6

       Col_4     7

Row_3  Col_1     8

       Col_2     9

       Col_3    10

       Col_4    11

Row_4  Col_1    12

       Col_2    13

       Col_3    14

       Col_4    15

dtype: int32

看到輸出結果,好像明白了點,有點類似Excel匯總一樣。不過,日后還得查點資料

二重MultiIndex的Series可以unstack()成DataFrame
data_for_multi1.unstack()

DataFrame可以stack成擁有?重MultiIndex的Series
data_for_multi1.unstack().stack()

輸出結果:

Row_1  Col_1     0

       Col_2     1

       Col_3     2

       Col_4     3

Row_2  Col_1     4

       Col_2     5

       Col_3     6

       Col_4     7

Row_3  Col_1     8

       Col_2     9

       Col_3    10

       Col_4    11

Row_4  Col_1    12

       Col_2    13

       Col_3    14

       Col_4    15

dtype: int32
非平衡數據的例子:
multi2 = pd.Index([("Row_"+str(x+1),"Col_"+str(y+1)) for x in xrange(5) for y in xrange(x)])

multi2

輸出結果:

MultiIndex(levels=[[u"Row_2", u"Row_3", u"Row_4", u"Row_5"], [u"Col_1", u"Col_2", u"Col_3", u"Col_4"]],

           labels=[[0, 1, 1, 2, 2, 2, 3, 3, 3, 3], [0, 0, 1, 0, 1, 2, 0, 1, 2, 3]])
data_for_multi2 = pd.Series(np.arange(10),index = multi2) data_for_multi2

輸出結果:

Row_2  Col_1    0

Row_3  Col_1    1

       Col_2    2

Row_4  Col_1    3

       Col_2    4

       Col_3    5

Row_5  Col_1    6

       Col_2    7

       Col_3    8

       Col_4    9

dtype: int32
DateTime標準庫如此好?,你值得擁有
import datetime

dates = [datetime.datetime(2015,1,1),datetime.datetime(2015,1,8),datetime.datetime(2015,1,30)]

pd.DatetimeIndex(dates)

輸出結果:

DatetimeIndex(["2015-01-01", "2015-01-08", "2015-01-30"], dtype="datetime64[ns]", freq=None, tz=None)
如果你不僅需要時間格式統一,時間頻率也要統一的話
periodindex1 = pd.period_range("2015-01","2015-04",freq="M")

print periodindex1

輸出結果:

PeriodIndex(["2015-01", "2015-02", "2015-03", "2015-04"], dtype="int64", freq="M")
月級精度和日級精度如何轉換?

有的公司統?以1號代表當月,有的公司統一以最后1天代表當?,轉化起來很麻煩,可以asfreq

print periodindex1.asfreq("D",how="start")

print periodindex1.asfreq("D",how="end")

輸出結果:

PeriodIndex(["2015-01-01", "2015-02-01", "2015-03-01", "2015-04-01"], dtype="int64", freq="D")

PeriodIndex(["2015-01-31", "2015-02-28", "2015-03-31", "2015-04-30"], dtype="int64", freq="D")
最后的最后,我要真正把兩種頻率的時間精度匹配上?
periodindex_mon = pd.period_range("2015-01","2015-03",freq="M").asfreq("D",how="start")

periodindex_day = pd.period_range("2015-01-01","2015-03-31",freq="D")

print periodindex_mon

print periodindex_day

輸出結果:

PeriodIndex(["2015-01-01", "2015-02-01", "2015-03-01"], dtype="int64", freq="D")

PeriodIndex(["2015-01-01", "2015-01-02", "2015-01-03", "2015-01-04",

             "2015-01-05", "2015-01-06", "2015-01-07", "2015-01-08",

             "2015-01-09", "2015-01-10", "2015-01-11", "2015-01-12",

             "2015-01-13", "2015-01-14", "2015-01-15", "2015-01-16",

             "2015-01-17", "2015-01-18", "2015-01-19", "2015-01-20",

             "2015-01-21", "2015-01-22", "2015-01-23", "2015-01-24",

             "2015-01-25", "2015-01-26", "2015-01-27", "2015-01-28",

             "2015-01-29", "2015-01-30", "2015-01-31", "2015-02-01",

             "2015-02-02", "2015-02-03", "2015-02-04", "2015-02-05",

             "2015-02-06", "2015-02-07", "2015-02-08", "2015-02-09",

             "2015-02-10", "2015-02-11", "2015-02-12", "2015-02-13",

             "2015-02-14", "2015-02-15", "2015-02-16", "2015-02-17",

             "2015-02-18", "2015-02-19", "2015-02-20", "2015-02-21",

             "2015-02-22", "2015-02-23", "2015-02-24", "2015-02-25",

             "2015-02-26", "2015-02-27", "2015-02-28", "2015-03-01",

             "2015-03-02", "2015-03-03", "2015-03-04", "2015-03-05",

             "2015-03-06", "2015-03-07", "2015-03-08", "2015-03-09",

             "2015-03-10", "2015-03-11", "2015-03-12", "2015-03-13",

             "2015-03-14", "2015-03-15", "2015-03-16", "2015-03-17",

             "2015-03-18", "2015-03-19", "2015-03-20", "2015-03-21",

             "2015-03-22", "2015-03-23", "2015-03-24", "2015-03-25",

             "2015-03-26", "2015-03-27", "2015-03-28", "2015-03-29",

             "2015-03-30", "2015-03-31"],

            dtype="int64", freq="D")
粗粒度數據+reindexffill/bfill
full_ts = pd.Series(periodindex_mon,index=periodindex_mon).reindex(periodindex_day,method="ffill")

full_ts

關于索引,?便的操作有?

前?描述過了,索引有序,重復,但?定程度上?能通過key來訪問,也就是說,某些集合操作都是可以?持的。

index1 = pd.Index(["A","B","B","C","C"])

index2 = pd.Index(["C","D","E","E","F"])

index3 = pd.Index(["B","C","A"])

print index1.append(index2)

print index1.difference(index2)

print index1.intersection(index2)

print index1.union(index2) # Support unique-value Index well

print index1.isin(index2)

print index1.delete(2)

print index1.insert(0,"K") # Not suggested

print index3.drop("A") # Support unique-value Index well

print index1.is_monotonic,index2.is_monotonic,index3.is_monotonic

print index1.is_unique,index2.is_unique,index3.is_unique

輸出結果:

Index([u"A", u"B", u"B", u"C", u"C", u"C", u"D", u"E", u"E", u"F"], dtype="object")

Index([u"A", u"B"], dtype="object")

Index([u"C", u"C"], dtype="object")

Index([u"A", u"B", u"B", u"C", u"C", u"D", u"E", u"E", u"F"], dtype="object")

[False False False  True  True]

Index([u"A", u"B", u"C", u"C"], dtype="object")

Index([u"K", u"A", u"B", u"B", u"C", u"C"], dtype="object")

Index([u"B", u"C"], dtype="object")

True True False

False False True
參考:

S1EP3_Pandas.pdf 不知道什么時候存到電腦里的資料,今天發現了它。感謝作者的資料。

Python數據分析入門之pandas總結基礎(二)

歡迎來Michael翔的博客查看完成版。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/37702.html

相關文章

  • Python數據分析入門pandas總結基礎(二)

    摘要:一大熊貓世界來去自如的老生常談,從基礎來看,我們仍然關心對于與外部數據是如何交互的。函數受限制問題唯一重要的參數,標志著一個的第個頁將會被取出。數據分析入門之總結基礎一歡迎來翔的博客查看完成版。 一.大熊貓世界來去自如:Pandas的I/O 老生常談,從基礎來看,我們仍然關心pandas對于與外部數據是如何交互的。 1.1 結構化數據輸入輸出 read_csv與to_csv 是?對...

    verano 評論0 收藏0
  • 首次公開,整理12年積累的博客收藏夾,零距離展示《收藏夾吃灰》系列博客

    摘要:時間永遠都過得那么快,一晃從年注冊,到現在已經過去了年那些被我藏在收藏夾吃灰的文章,已經太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設置私密了,不收拾不好看呀。 ...

    Harriet666 評論0 收藏0
  • 我是如何入門機器學習的呢

    摘要:在這里我分享下我個人入門機器學習的經歷,希望能對大家能有所幫助。相關學習鏈接,,入門后的體驗在入門了機器學習之后,在實際工作中,絕大多數的情況下你并不需要去創造一個新的算法。 機器學習在很多眼里就是香餑餑,因為機器學習相關的崗位在當前市場待遇不錯,但同時機器學習在很多人面前又是一座大山,因為發現它太難學了。在這里我分享下我個人入門機器學習的經歷,希望能對大家能有所幫助。 PS:這篇文章...

    ShowerSun 評論0 收藏0

發表評論

0條評論

alanoddsoff

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<