Pandas學習筆記系列:
- Pandas學習筆記(一)基本介紹
- Pandas學習筆記(二)選擇數據
- Pandas學習筆記(三)修改&添加值
- Pandas學習筆記(四)處理丟失值
- Pandas學習筆記(五)合並 concat
- Pandas學習筆記(六)合並 merge
- Pandas學習筆記(七)plot畫圖
原文: https://morvanzhou.github.io/tutorials/data-manipulation/np-pd/3-1-pd-intro/
Numpy 和 Pandas 有什么不同
如果用 python 的列表和字典來作比較, 那么可以說 Numpy 是列表形式的,沒有數值標簽,而 Pandas 就是字典形式。Pandas是基於Numpy構建的,讓Numpy為中心的應用變得更加簡單。
要使用pandas,首先需要了解他主要兩個數據結構:Series
和DataFrame
。
Series
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是一個表格型的數據結構,它包含有一組有序的列,每列可以是不同的值類型(數值,字符串,布爾值等)。DataFrame既有行索引也有列索引, 它可以被看做由Series組成的大字典。
用下面的例子簡單理解就是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 的元素:
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
DataFrame 的一些簡單運用
不指定columns和index
我們在創建一組沒有給定行標簽和列標簽的數據 df1:
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.
指定columns
還有一種生成 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
如果想要查看數據中的類型, 我們可以用 dtypes
這個屬性:
print(df2.dtypes)
>>>
df2.dtypes
A float64
B datetime64[ns]
C float32
D int32
E category
F object
dtype: object
index
如果想看對列的序號:
print(df2.index)
>>>
Int64Index([0, 1, 2, 3], dtype='int64')
columns
同樣, 每種數據的名稱也能看到:
print(df2.columns)
# Index(['A', 'B', 'C', 'D', 'E', 'F'], dtype='object')
values
如果只想看所有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
想知道數據的總結, 可以用 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
如果想翻轉數據, 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
sort
- 如果想對數據的
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