Pandas學習筆記系列:html
原文: https://morvanzhou.github.io/tutorials/data-manipulation/np-pd/3-1-pd-intro/python
若是用 python 的列表和字典來做比較, 那麼能夠說 Numpy 是列表形式的,沒有數值標籤,而 Pandas 就是字典形式。Pandas是基於Numpy構建的,讓Numpy爲中心的應用變得更加簡單。git
要使用pandas,首先須要瞭解他主要兩個數據結構:Series
和DataFrame
。github
import pandas as pd import numpy as np s = pd.Series([1,3,6,np.nan,44,1]) print(s) >>> 0 1.0 1 3.0 2 6.0 3 NaN 4 44.0 5 1.0 dtype: float64
Series的字符串表現形式爲:索引在左邊,值在右邊。因爲咱們沒有爲數據指定索引。因而會自動建立一個0到N-1(N爲長度)的整數型索引。數據結構
DataFrame是一個表格型的數據結構,它包含有一組有序的列,每列能夠是不一樣的值類型(數值,字符串,布爾值等)。DataFrame既有行索引也有列索引, 它能夠被看作由Series組成的大字典。dom
用下面的例子簡單理解就是DataFrame
由columns
,index
,values
組成:學習
columns
: ['a','b','c','d']index
:dates (日期)values
:np.random.randn(6,4)dates = pd.date_range('20160101',periods=6) df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=['a','b','c','d']) print(df) >>> a b c d 2016-01-01 -0.253065 -2.071051 -0.640515 0.613663 2016-01-02 -1.147178 1.532470 0.989255 -0.499761 2016-01-03 1.221656 -2.390171 1.862914 0.778070 2016-01-04 1.473877 -0.046419 0.610046 0.204672 2016-01-05 -1.584752 -0.700592 1.487264 -1.778293 2016-01-06 0.633675 -1.414157 -0.277066 -0.442545
咱們能夠根據每個不一樣的索引來挑選數據, 好比挑選 b 的元素:spa
print(df['b']) >>> 2016-01-01 -2.071051 2016-01-02 1.532470 2016-01-03 -2.390171 2016-01-04 -0.046419 2016-01-05 -0.700592 2016-01-06 -1.414157 Freq: D, Name: b, dtype: float64
咱們在建立一組沒有給定行標籤和列標籤的數據 df1:code
df1 = pd.DataFrame(np.arange(12).reshape((3,4))) print(df1) >>> 0 1 2 3 0 0 1 2 3 1 4 5 6 7 2 8 9 10 11
這樣,他就會採起默認的從0開始 index.htm
還有一種生成 df 的方法, 以下 df2:
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'}) print(df2) >>> A B C D E F 0 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
這種方法能對每一列的數據進行特殊對待.
若是想要查看數據中的類型, 咱們能夠用 dtypes
這個屬性:
print(df2.dtypes) >>> df2.dtypes A float64 B datetime64[ns] C float32 D int32 E category F object dtype: object
若是想看對列的序號:
print(df2.index) >>> Int64Index([0, 1, 2, 3], dtype='int64')
一樣, 每種數據的名稱也能看到:
print(df2.columns) # Index(['A', 'B', 'C', 'D', 'E', 'F'], dtype='object')
若是隻想看全部df2的值:
print(df2.values) >>> array([[1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'test', 'foo'], [1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'train', 'foo'], [1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'test', 'foo'], [1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'train', 'foo']], dtype=object)
想知道數據的總結, 能夠用 describe():
df2.describe() >>> A C D count 4.0 4.0 4.0 mean 1.0 1.0 3.0 std 0.0 0.0 0.0 min 1.0 1.0 3.0 25% 1.0 1.0 3.0 50% 1.0 1.0 3.0 75% 1.0 1.0 3.0 max 1.0 1.0 3.0
若是想翻轉數據, transpose:
print(df2.T) >>> 0 1 2 \ A 1 1 1 B 2013-01-02 00:00:00 2013-01-02 00:00:00 2013-01-02 00:00:00 C 1 1 1 D 3 3 3 E test train test F foo foo foo 3 A 1 B 2013-01-02 00:00:00 C 1 D 3 E train F foo
index
進行排序並輸出:print(df2.sort_index(axis=1, ascending=False)) >>> F E D C B A 0 foo test 3 1.0 2013-01-02 1.0 1 foo train 3 1.0 2013-01-02 1.0 2 foo test 3 1.0 2013-01-02 1.0 3 foo train 3 1.0 2013-01-02 1.0
value
排序輸出:print(df2.sort_values(by='B')) >>> A B C D E F 0 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