欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python科學(xué)計算之Pandas詳解

 更新時間:2017年01月15日 17:01:44   作者:棲遲於一丘  
Pandas 是 python 的一個數(shù)據(jù)分析包,屬于PyData項目的一部分。下面這篇文章主要介紹了Python中科學(xué)計算之Pandas,需要的朋友可以參考借鑒,下面來一起學(xué)習(xí)學(xué)習(xí)。

起步

Pandas最初被作為金融數(shù)據(jù)分析工具而開發(fā)出來,因此 pandas 為時間序列分析提供了很好的支持。 Pandas 的名稱來自于面板數(shù)據(jù)(panel data)和python數(shù)據(jù)分析 (data analysis) 。panel data是經(jīng)濟(jì)學(xué)中關(guān)于多維數(shù)據(jù)集的一個術(shù)語,在Pandas中也提供了panel的數(shù)據(jù)類型。

在我看來,對于 Numpy 以及 Matplotlib ,Pandas可以幫助創(chuàng)建一個非常牢固的用于數(shù)據(jù)挖掘與分析的基礎(chǔ)。而Scipy當(dāng)然是另一個主要的也十分出色的科學(xué)計算庫。

安裝與導(dǎo)入

通過pip進(jìn)行安裝: pip install pandas

導(dǎo)入:

import pandas as pd

Pandas的數(shù)據(jù)類型

Pandas基于兩種數(shù)據(jù)類型: series 與 dataframe 。

Series

一個series是一個一維的數(shù)據(jù)類型,其中每一個元素都有一個標(biāo)簽。類似于Numpy中元素帶標(biāo)簽的數(shù)組。其中,標(biāo)簽可以是數(shù)字或者字符串。

# coding: utf-8
import numpy as np
import pandas as pd

s = pd.Series([1, 2, 5, np.nan, 6, 8])
print s

輸出:

0 1.0
1 2.0
2 5.0
3 NaN
4 6.0
5 8.0
dtype: float64

DataFrame

一個dataframe是一個二維的表結(jié)構(gòu)。Pandas的dataframe可以存儲許多種不同的數(shù)據(jù)類型,并且每一個坐標(biāo)軸都有自己的標(biāo)簽。你可以把它想象成一個series的字典項。

創(chuàng)建一個 DateFrame:

#創(chuàng)建日期索引序列 
dates = pd.date_range('20130101', periods=6)
#創(chuàng)建Dataframe,其中 index 決定索引序列,columns 決定列名
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
print df

輸出:

   A  B  C  D
2013-01-01 -0.334482 0.746019 -2.205026 -0.803878
2013-01-02 2.007879 1.559073 -0.527997 0.950946
2013-01-03 -1.053796 0.438214 -0.027664 0.018537
2013-01-04 -0.208744 -0.725155 -0.395226 -0.268529
2013-01-05 0.080822 -1.215433 -0.785030 0.977654
2013-01-06 -0.126459 0.426328 -0.474553 -1.968056

字典創(chuàng)建 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' })

輸出:

 A  B C D E F
0 1 2013-01-02 1 3 test foo
1 1 2013-01-02 1 3 train foo
2 1 2013-01-02 1 3 test foo
3 1 2013-01-02 1 3 train foo

將文件數(shù)據(jù)導(dǎo)入Pandas

df = pd.read_csv("Average_Daily_Traffic_Counts.csv", header = 0)
df.head()

數(shù)據(jù)源可以是 英國政府?dāng)?shù)據(jù) 或 美國政府?dāng)?shù)據(jù) 來獲取數(shù)據(jù)源。當(dāng)然, Kaggle 是另一個好用的數(shù)據(jù)源。

選擇/切片

# 選擇單獨(dú)的一列,返回 Serires,與 df.A 效果相當(dāng)。
df['A']

# 位置切片
df[0:3]

# 索引切片
df['20130102':'20130104']

# 通過標(biāo)簽選擇
df.loc[dates[0]]

# 對多個軸同時通過標(biāo)簽進(jìn)行選擇
df.loc[:,['A','B']]

# 獲得某一個單元的數(shù)據(jù)
df.loc[dates[0],'A']
# 或者
df.at[dates[0],'A'] # 速度更快的做法

# 通過位置進(jìn)行選擇
df.iloc[3]

# 切片
df.iloc[3:5,0:2]

# 列表選擇
df.iloc[[1,2,4],[0,2]]

# 獲得某一個單元的數(shù)據(jù)
df.iloc[1,1]
# 或者
df.iat[1,1] # 更快的做法

# 布爾索引
df[df.A > 0]

# 獲得大于零的項的數(shù)值
df[df > 0]

# isin 過濾
df2[df2['E'].isin(['two','four'])]

賦值

# 新增一列,根據(jù)索引排列
s1 = pd.Series([1,2,3,4,5,6], index=pd.date_range('20130102', periods=6))
df['F'] = s1

# 缺省項
# 在 pandas 中使用 np.nan 作為缺省項的值。
df1 = df.reindex(index=dates[0:4], columns=list(df.columns) + ['E'])
df1.loc[dates[0]:dates[1],'E'] = 1

# 刪除所有帶有缺省項的行
df1.dropna(how='any')

# 填充缺省項
df1.fillna(value=5)

# 獲得缺省項的布爾掩碼
pd.isnull(df1)

觀察操作

# 觀察開頭的數(shù)據(jù)
df.head()

# 觀察末尾的數(shù)據(jù)
df.tail(3)

# 顯示索引
df.index

# 顯示列
df.columns

# 顯示底層 numpy 結(jié)構(gòu)
df.values

# DataFrame 的基本統(tǒng)計學(xué)屬性預(yù)覽
df.describe()
"""
  A  B  C  D
count 6.000000 6.000000 6.000000 6.000000 #數(shù)量
mean 0.073711 -0.431125 -0.687758 -0.233103 #平均值
std 0.843157 0.922818 0.779887 0.973118 #標(biāo)準(zhǔn)差
min -0.861849 -2.104569 -1.509059 -1.135632 #最小值
25% -0.611510 -0.600794 -1.368714 -1.076610 #正態(tài)分布 25%
50% 0.022070 -0.228039 -0.767252 -0.386188 #正態(tài)分布 50%
75% 0.658444 0.041933 -0.034326 0.461706 #正態(tài)分布 75%
max 1.212112 0.567020 0.276232 1.071804 #最大值
"""

# 轉(zhuǎn)置
df.T

# 根據(jù)某一軸的索引進(jìn)行排序
df.sort_index(axis=1, ascending=False)

# 根據(jù)某一列的數(shù)值進(jìn)行排序
df.sort(columns='B')

統(tǒng)計

# 求平均值
df.mean()
"""
A -0.004474
B -0.383981
C -0.687758
D 5.000000
F 3.000000
dtype: float64
"""

# 指定軸上的平均值
df.mean(1)

# 不同維度的 pandas 對象也可以做運(yùn)算,它會自動進(jìn)行對應(yīng),shift 用來做對齊操作。
s = pd.Series([1,3,5,np.nan,6,8], index=dates).shift(2)
"""
2013-01-01 NaN
2013-01-02 NaN
2013-01-03 1
2013-01-04 3
2013-01-05 5
2013-01-06 NaN
Freq: D, dtype: float64
"""

# 對不同維度的 pandas 對象進(jìn)行減法操作
df.sub(s, axis='index')
"""
   A  B  C D F
2013-01-01 NaN NaN NaN NaN NaN
2013-01-02 NaN NaN NaN NaN NaN
2013-01-03 -1.861849 -3.104569 -1.494929 4 1
2013-01-04 -2.278445 -3.706771 -4.039575 2 0
2013-01-05 -5.424972 -4.432980 -4.723768 0 -1
2013-01-06 NaN NaN NaN NaN NaN
"""

函數(shù)應(yīng)用

# 累加
df.apply(np.cumsum)

直方圖

s = pd.Series(np.random.randint(0, 7, size=10))
s.value_counts()
"""
4 5
6 2
2 2
1 1
dtype: int64
String Methods
"""

字符處理

s = pd.Series(['A', 'B', 'C', 'Aaba', 'Baca', np.nan, 'CABA', 'dog', 'cat'])
s.str.lower()
"""
0 a
1 b
2 c
3 aaba
4 baca
5 NaN
6 caba
7 dog
8 cat
dtype: object
"""

合并

使用 concat() 連接 pandas 對象:

df = pd.DataFrame(np.random.randn(10, 4))
"""
  0  1  2  3
0 -0.548702 1.467327 -1.015962 -0.483075
1 1.637550 -1.217659 -0.291519 -1.745505
2 -0.263952 0.991460 -0.919069 0.266046
3 -0.709661 1.669052 1.037882 -1.705775
4 -0.919854 -0.042379 1.247642 -0.009920
5 0.290213 0.495767 0.362949 1.548106
6 -1.131345 -0.089329 0.337863 -0.945867
7 -0.932132 1.956030 0.017587 -0.016692
8 -0.575247 0.254161 -1.143704 0.215897
9 1.193555 -0.077118 -0.408530 -0.862495
"""

pieces = [df[:3], df[3:7], df[7:]]
pd.concat(pieces)
"""
  0  1  2  3
0 -0.548702 1.467327 -1.015962 -0.483075
1 1.637550 -1.217659 -0.291519 -1.745505
2 -0.263952 0.991460 -0.919069 0.266046
3 -0.709661 1.669052 1.037882 -1.705775
4 -0.919854 -0.042379 1.247642 -0.009920
5 0.290213 0.495767 0.362949 1.548106
6 -1.131345 -0.089329 0.337863 -0.945867
7 -0.932132 1.956030 0.017587 -0.016692
8 -0.575247 0.254161 -1.143704 0.215897
9 1.193555 -0.077118 -0.408530 -0.862495
"""

join 合并:

left = pd.DataFrame({'key': ['foo', 'foo'], 'lval': [1, 2]})
right = pd.DataFrame({'key': ['foo', 'foo'], 'rval': [4, 5]})
pd.merge(left, right, on='key')
"""
 key lval rval
0 foo 1 4
1 foo 1 5
2 foo 2 4
3 foo 2 5
"""

追加

在 dataframe 數(shù)據(jù)后追加行

df = pd.DataFrame(np.random.randn(8, 4), columns=['A','B','C','D'])
s = df.iloc[3]
df.append(s, ignore_index=True)

分組

分組常常意味著可能包含以下的幾種的操作中一個或多個

  • 依據(jù)一些標(biāo)準(zhǔn)分離數(shù)據(jù)
  • 對組單獨(dú)地應(yīng)用函數(shù)
  • 將結(jié)果合并到一個數(shù)據(jù)結(jié)構(gòu)中
df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',
    'foo', 'bar', 'foo', 'foo'],
   'B' : ['one', 'one', 'two', 'three',
    'two', 'two', 'one', 'three'],
   'C' : np.random.randn(8),
   'D' : np.random.randn(8)})

# 對單個分組應(yīng)用函數(shù),數(shù)據(jù)被分成了 bar 組與 foo 組,分別計算總和。
df.groupby('A').sum()

# 依據(jù)多個列分組會構(gòu)成一個分級索引
df.groupby(['A','B']).sum()
"""
   C  D
A B   
bar one -1.814470 2.395985
 three -0.595447 0.166599
 two -0.392670 -0.136473
foo one -1.195665 -0.616981
 three 1.928123 -1.623033
 two 2.414034 1.600434
"""

數(shù)據(jù)透視表

df = pd.DataFrame({'A' : ['one', 'one', 'two', 'three'] * 3,
   'B' : ['A', 'B', 'C'] * 4,
   'C' : ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 2,
   'D' : np.random.randn(12),
   'E' : np.random.randn(12)})

# 生成數(shù)據(jù)透視表
pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'])
"""
C  bar foo
A B   
one A -0.773723 1.418757
 B -0.029716 -1.879024
 C -1.146178 0.314665
three A 1.006160 NaN
 B NaN -1.035018
 C 0.648740 NaN
two A NaN 0.100900
 B -1.170653 NaN
 C NaN 0.536826
"""

時間序列

pandas 擁有既簡單又強(qiáng)大的頻率變換重新采樣功能,下面的例子從 1次/秒 轉(zhuǎn)換到了 1次/5分鐘:

rng = pd.date_range('1/1/2012', periods=100, freq='S')
ts = pd.Series(np.random.randint(0, 500, len(rng)), index=rng)
ts.resample('5Min', how='sum')
"""
2012-01-01 25083
Freq: 5T, dtype: int32
"""

# 本地化時區(qū)表示
rng = pd.date_range('3/6/2012 00:00', periods=5, freq='D')
ts = pd.Series(np.random.randn(len(rng)), rng)
"""
2012-03-06 0.464000
2012-03-07 0.227371
2012-03-08 -0.496922
2012-03-09 0.306389
2012-03-10 -2.290613
Freq: D, dtype: float64
"""

ts_utc = ts.tz_localize('UTC')
"""
2012-03-06 00:00:00+00:00 0.464000
2012-03-07 00:00:00+00:00 0.227371
2012-03-08 00:00:00+00:00 -0.496922
2012-03-09 00:00:00+00:00 0.306389
2012-03-10 00:00:00+00:00 -2.290613
Freq: D, dtype: float64
"""

# 轉(zhuǎn)換為周期
ps = ts.to_period()

# 轉(zhuǎn)換為時間戳
ps.to_timestamp()

分類

df = pd.DataFrame({"id":[1,2,3,4,5,6], "raw_grade":['a', 'b', 'b', 'a', 'a', 'e']})

# 將 raw_grades 轉(zhuǎn)換成 Categoricals 類型
df["grade"] = df["raw_grade"].astype("category")
df["grade"]
"""
0 a
1 b
2 b
3 a
4 a
5 e
Name: grade, dtype: category
Categories (3, object): [a, b, e]
"""

# 重命名分類
df["grade"] = df["grade"].cat.set_categories(["very bad", "bad", "medium", "good", "very good"])

# 根據(jù)分類的順序?qū)?shù)據(jù)進(jìn)行排序
df.sort("grade")
"""
 id raw_grade  grade
5 6   e very bad
1 2   b  good
2 3   b  good
0 1   a very good
3 4   a very good
4 5   a very good
"""

作圖

ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts = ts.cumsum()
ts.plot()

數(shù)據(jù)IO

# 從 csv 文件讀取數(shù)據(jù)
pd.read_csv('foo.csv')

# 保存到 csv 文件
df.to_csv('foo.csv')

# 讀取 excel 文件
pd.read_excel('foo.xlsx', 'Sheet1', index_col=None, na_values=['NA'])

# 保存到 excel 文件
df.to_excel('foo.xlsx', sheet_name='Sheet1')

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家學(xué)習(xí)或者使用python能帶來一定的幫助,如果有疑問大家可以留言交流。

相關(guān)文章

  • 使用PyCharm創(chuàng)建Django項目及基本配置詳解

    使用PyCharm創(chuàng)建Django項目及基本配置詳解

    pycharm是個很不錯的python開發(fā)工具,大大縮短了python項目的創(chuàng)建時間以及調(diào)試時間。這篇文章主要介紹了使用PyCharm創(chuàng)建Django項目及基本配置詳解,pycharm是個很不錯的python開發(fā)工具,大大縮短了python項目的創(chuàng)建時間以及調(diào)試時間
    2018-10-10
  • Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)將名稱映射到序列元素中的方法

    Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)將名稱映射到序列元素中的方法

    這篇文章主要介紹了Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)將名稱映射到序列元素中的方法,結(jié)合實例形式分析了Python使用collections.namedtuple()進(jìn)行元組命名相關(guān)操作技巧,需要的朋友可以參考下
    2018-03-03
  • 詳解Python prometheus_client使用方式

    詳解Python prometheus_client使用方式

    本文主要介紹了Python prometheus_client使用方式,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Python對圖像進(jìn)行灰度處理的代碼介紹

    Python對圖像進(jìn)行灰度處理的代碼介紹

    這篇文章主要給大家介紹了關(guān)于Python對圖像進(jìn)行灰度處理的相關(guān)資料,圖像灰度化是將一幅彩色圖像轉(zhuǎn)換為灰度化圖像的過程,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • 提升Python編程水平必不可少的重構(gòu)技巧

    提升Python編程水平必不可少的重構(gòu)技巧

    在Python中,編寫可讀性強(qiáng)且Pythonic的代碼是至關(guān)重要的,重構(gòu)技巧是指通過調(diào)整代碼結(jié)構(gòu)和風(fēng)格,使其更符合Python的慣例和標(biāo)準(zhǔn),從而提高代碼的可讀性、簡潔性和可維護(hù)性,本文將深入探討八項重構(gòu)技巧,幫助您編寫更Pythonic的代碼
    2024-01-01
  • 用Python監(jiān)控你的朋友都在瀏覽哪些網(wǎng)站?

    用Python監(jiān)控你的朋友都在瀏覽哪些網(wǎng)站?

    今天教各位小伙伴一個黑科技,用Python監(jiān)控你的朋友都在瀏覽哪些網(wǎng)站,文中有非常詳細(xì)的介紹,對正在學(xué)習(xí)python的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • django ORM之values和annotate使用詳解

    django ORM之values和annotate使用詳解

    這篇文章主要介紹了django ORM之values和annotate使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • python中用shutil.move移動文件或目錄的方法實例

    python中用shutil.move移動文件或目錄的方法實例

    在python操作中大家對os,shutil,sys,等通用庫一定不陌生,下面這篇文章主要給大家介紹了關(guān)于python中用shutil.move移動文件或目錄的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • Python3列表List入門知識附實例

    Python3列表List入門知識附實例

    序列是Python中最基本的數(shù)據(jù)結(jié)構(gòu)。序列中的每個元素都分配一個數(shù)字 - 它的位置,或索引,第一個索引是0,第二個索引是1,依此類推
    2020-02-02
  • Python實現(xiàn)的旋轉(zhuǎn)數(shù)組功能算法示例

    Python實現(xiàn)的旋轉(zhuǎn)數(shù)組功能算法示例

    這篇文章主要介紹了Python實現(xiàn)的旋轉(zhuǎn)數(shù)組功能算法,結(jié)合實例形式總結(jié)分析了數(shù)組旋轉(zhuǎn)算法的原理與實現(xiàn)技巧,需要的朋友可以參考下
    2019-02-02

最新評論