Python資料分析庫pandas基本操作
pandas是什麼?
是它嗎?
。。。。很顯然pandas沒有這個傢伙那麼可愛。。。。
我們來看看pandas的官網是怎麼來定義自己的:
pandas is an open source, easy-to-use data structures and data analysis tools for the Python programming language.
很顯然,pandas是python的一個非常強大的資料分析庫!
讓我們來學習一下它吧!
1.pandas序列
import numpy as np
import pandas as pd
s_data = pd.Series([1,3,5,7,np.NaN,9,11])#pandas中生產序列的函式,類似於我們平時說的陣列
print s_data
2.pandas資料結構DataFrame
import numpy as np
import pandas as pd
#以20170220為基點向後生產時間點
dates = pd.date_range('20170220',periods=6)
#DataFrame生成函式,行索引為時間點,列索引為ABCD
data = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))
print data
print
print data.shape
print
print data.values
3.DataFrame的一些操作(1)
import numpy as np
import pandas as pd
#設計一個字典
d_data = {'A':1,'B':pd.Timestamp('20170220'),'C':range(4),'D':np.arange(4)}
print d_data
#使用字典生成一個DataFrame
df_data = pd.DataFrame(d_data)
print df_data
#DataFrame中每一列的型別
print df_data.dtypes
#列印A列
print df_data.A
#列印B列
print df_data.B
#B列的型別
print type(df_data.B)
4.DataFrame的一些操作(2)
import numpy as np
import pandas as pd
dates = pd.date_range('20170220',periods=6)
data = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))
print data
print
#輸出DataFrame頭部資料,預設為前5行
print data.head()
#輸出輸出DataFrame第一行資料
print data.head(1)
#輸出DataFrame尾部資料,預設為後5行
print data.tail()
#輸出輸出DataFrame最後一行資料
print data.tail(1)
#輸出行索引
print data.index
#輸出列索引
print data.columns
#輸出DataFrame資料值
print data.values
#輸出DataFrame詳細資訊
print data.describe()
5.DataFrame的一些操作(3)
import numpy as np
import pandas as pd
dates = pd.date_range('20170220',periods=6)
data = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))
print data
print
#轉置
print data.T
#輸出維度資訊
print data.shape
#轉置後的維度資訊
print data.T.shape
#將列索引排序
print data.sort_index(axis = 1)
#將列索引排序,降序排列
print data.sort_index(axis = 1,ascending=False)
#將行索引排序,降序排列
print data.sort_index(axis = 0,ascending=False)
#按照A列的值進行升序排列
print data.sort_values(by='A')
6.DataFrame的一些操作(4)
import numpy as np
import pandas as pd
dates = pd.date_range('20170220',periods=6)
data = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))
print data
#輸出A列
print data.A
#輸出A列
print data['A']
#輸出3,4行
print data[2:4]
#輸出3,4行
print data['20170222':'20170223']
#輸出3,4行
print data.loc['20170222':'20170223']
#輸出3,4行
print data.iloc[2:4]
輸出B,C兩列
print data.loc[:,['B','C']]
7.DataFrame的一些操作(5)
import numpy as np
import pandas as pd
dates = pd.date_range('20170220',periods=6)
data = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))
print data
#輸出A列中大於0的行
print data[data.A > 0]
#輸出大於0的資料,小於等於0的用NaN補位
print data[data > 0]
#拷貝data
data2 = data.copy()
print data2
tag = ['a'] * 2 + ['b'] * 2 + ['c'] * 2
#在data2中增加TAG列用tag賦值
data2['TAG'] = tag
print data2
#列印TAG列中為a,c的行
print data2[data2.TAG.isin(['a','c'])]
8.DataFrame的一些操作(6)
import numpy as np
import pandas as pd
dates = pd.date_range('20170220',periods=6)
data = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))
print data
#將第一行第一列元素賦值為100
data.iat[0,0] = 100
print data
#將A列元素用range(6)賦值
data.A = range(6)
print data
#將B列元素賦值為200
data.B = 200
print data
#將3,4列元素賦值為1000
data.iloc[:,2:5] = 1000
print data
9.DataFrame的一些操作(7)
import numpy as np
import pandas as pd
dates = pd.date_range('20170220',periods = 6)
df = pd.DataFrame(np.random.randn(6,4) , index = dates , columns = list('ABCD'))
print df
#重定義索引,並新增E列
dfl = df.reindex(index = dates[0:4],columns = list(df.columns)+['E'])
print dfl
#將E列中的2,3行賦值為2
dfl.loc[dates[1:3],'E'] = 2
print dfl
#去掉存在NaN元素的行
print dfl.dropna()
#將NaN元素賦值為5
print dfl.fillna(5)
#判斷每個元素是否為NaN
print pd.isnull(dfl)
#求列平均值
print dfl.mean()
#對每列進行累加
print dfl.cumsum()
10.DataFrame的一些操作(8)
import numpy as np
import pandas as pd
dates = pd.date_range('20170220',periods = 6)
df = pd.DataFrame(np.random.randn(6,4) , index = dates , columns = list('ABCD'))
print df
dfl = df.reindex(index = dates[0:4],columns = list(df.columns)+['E'])
print dfl
#針對行求平均值
print dfl.mean(axis=1)
#生成序列並向右平移兩位
s = pd.Series([1,3,5,np.nan,6,8],index = dates).shift(2)
print s
#df與s做減法運算
print df.sub(s,axis = 'index')
#每列進行累加運算
print df.apply(np.cumsum)
#每列的最大值減去最小值
print df.apply(lambda x: x.max() - x.min())
11.DataFrame的一些操作(9)
import numpy as np
import pandas as pd
dates = pd.date_range('20170220',periods = 6)
df = pd.DataFrame(np.random.randn(6,4) , index = dates , columns = list('ABCD'))
print df
#定義一個函式
def _sum(x):
print(type(x))
return x.sum()
#apply函式可以接受一個函式作為引數
print df.apply(_sum)
s = pd.Series(np.random.randint(10,20,size = 15))
print s
#統計序列中每個元素出現的次數
print s.value_counts()
#返回出現次數最多的元素
print s.mode()
12.DataFrame的一些操作(10)
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randn(10,4) , columns = list('ABCD'))
print df
#合併函式
dfl = pd.concat([df.iloc[:3],df.iloc[3:7],df.iloc[7:]])
print dfl
#判斷兩個DataFrame中元素是否相等
print df == dfl
13.DataFrame的一些操作(11)
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randn(10,4) , columns = list('ABCD'))
print df
left = pd.DataFrame({'key':['foo','foo'],'lval':[1,2]})
right = pd.DataFrame({'key':['foo','foo'],'rval':[4,5]})
print left
print right
#通過key來合併資料
print pd.merge(left,right,on='key')
s = pd.Series(np.random.randint(1,5,size = 4),index = list('ABCD'))
print s
#通過序列新增一行
print df.append(s,ignore_index = True)
14.DataFrame的一些操作(12)
import numpy as np
import pandas as pd
df = pd.DataFrame({'A': ['foo','bar','foo','bar',
'foo','bar','foo','bar'],
'B': ['one','one','two','three',
'two','two','one','three'],
'C': np.random.randn(8),
'D': np.random.randn(8)})
print df
print
#根據A列的索引求和
print df.groupby('A').sum()
print
#先根據A列的索引,在根據B列的索引求和
print df.groupby(['A','B']).sum()
print
#先根據B列的索引,在根據A列的索引求和
print df.groupby(['B','A']).sum()
15.DataFrame的一些操作(13)
import pandas as pd
import numpy as np
#zip函式可以打包成一個個tuple
tuples = list(zip(*[['bar', 'bar', 'baz', 'baz',
'foo', 'foo', 'qux', 'qux'],
['one', 'two', 'one', 'two',
'one', 'two', 'one', 'two']]))
print tuples
#生成一個多層索引
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
print index
print
df = pd.DataFrame(np.random.randn(8, 2), index=index, columns=['A', 'B'])
print df
print
#將列索引變成行索引
print df.stack()
16.DataFrame的一些操作(14)
import pandas as pd
import numpy as np
tuples = list(zip(*[['bar', 'bar', 'baz', 'baz',
'foo', 'foo', 'qux', 'qux'],
['one', 'two', 'one', 'two',
'one', 'two', 'one', 'two']]))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
df = pd.DataFrame(np.random.randn(8, 2), index=index, columns=['A', 'B'])
print df
print
stacked = df.stack()
print stacked
#將行索引轉換為列索引
print stacked.unstack()
#轉換兩次
print stacked.unstack().unstack()
17.DataFrame的一些操作(15)
import pandas as pd
import numpy as np
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)})
print df
#根據A,B索引為行,C的索引為列處理D的值
print pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'])
#感覺A列等於one為索引,根據C列組合的平均值
print df[df.A=='one'].groupby('C').mean()
18.時間序列(1)
import pandas as pd
import numpy as np
#建立一個以20170220為基準的以秒為單位的向前推進600個的時間序列
rng = pd.date_range('20170220', periods=600, freq='s')
print rng
#以時間序列為索引的序列
print pd.Series(np.random.randint(0, 500, len(rng)), index=rng)
19.時間序列(2)
import pandas as pd
import numpy as np
rng = pd.date_range('20170220', periods=600, freq='s')
ts = pd.Series(np.random.randint(0, 500, len(rng)), index=rng)
#重取樣,以2分鐘為單位進行加和取樣
print ts.resample('2Min', how='sum')
#列出2011年1季度到2017年1季度
rng1 = pd.period_range('2011Q1','2017Q1',freq='Q')
print rng1
#轉換成時間戳形式
print rng1.to_timestamp()
#時間加減法
print pd.Timestamp('20170220') - pd.Timestamp('20170112')
print pd.Timestamp('20170220') + pd.Timedelta(days=12)
20.資料類別
import pandas as pd
import numpy as np
df = pd.DataFrame({"id":[1,2,3,4,5,6], "raw_grade":['a', 'b', 'b', 'a', 'a', 'e']})
print df
#新增類別資料,以raw_grade的值為類別基礎
df["grade"] = df["raw_grade"].astype("category")
print df
#列印類別
print df["grade"].cat.categories
#更改類別
df["grade"].cat.categories = ["very good", "good", "very bad"]
print df
#根據grade的值排序
print df.sort_values(by='grade', ascending=True)
#根據grade排序顯示數量
print df.groupby("grade").size()
21.資料視覺化
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
ts = pd.Series(np.random.randn(1000), index=pd.date_range('20170220', periods=1000))
ts = ts.cumsum()
print ts
ts.plot()
plt.show()
22.資料讀寫
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10, 4), columns=list('ABCD'))
#資料儲存,相對路徑
df.to_csv('data.csv')
#資料讀取
print pd.read_csv('data.csv', index_col=0)
資料被儲存到這個檔案中:
開啟看看:
是不是感覺很強大!
相關文章
- python+資料庫(三)用python對資料庫基本操作Python資料庫
- Python - pandas 資料分析Python
- Python3資料庫操作基本類Python資料庫
- Python資料分析之pandasPython
- 資料庫基本操作資料庫
- Python資料分析之Pandas篇Python
- postgresql 資料庫基本操作SQL資料庫
- Laravel 資料庫基本操作Laravel資料庫
- 資料庫的基本操作資料庫
- 【Falsk 使用資料庫】---- 資料庫基本操作資料庫
- mysql資料庫基本操作(五)MySql資料庫
- mysql資料庫基本操作(三)MySql資料庫
- mysql資料庫基本操作(四)MySql資料庫
- 02、MySQL—資料庫基本操作MySql資料庫
- mysql資料庫基本操作(六)MySql資料庫
- 資料庫基本操作 術語資料庫
- Python資料分析庫之pandas,你該這麼學!No.1Python
- Python利用pandas處理資料與分析Python
- 用 Python 進行資料分析 pandas (一)Python
- Python入門教程—資料分析工具PandasPython
- pandas基本使用(一)-- 利用python進行資料分析筆記(第五章)Python筆記
- MongoDB資料庫的基本操作梳理MongoDB資料庫
- python-資料分析-Pandas-1、Series物件Python物件
- Python 操作 SQLite 資料庫PythonSQLite資料庫
- Python操作SQLite資料庫PythonSQLite資料庫
- python操作mongodb資料庫PythonMongoDB資料庫
- python-資料分析-Pandas-3、DataFrame-資料重塑Python
- Python 資料處理庫 pandas 入門教程Python
- Python 資料處理庫 pandas 進階教程Python
- 2.資料庫Mysql--------基本操作資料庫MySql
- Oracle dos連線資料庫基本操作Oracle資料庫
- Pandas庫基礎分析——資料生成和訪問
- python-資料分析-Pandas-4、DataFrame-資料透視Python
- pandas的基礎使用,資料庫連線,檔案讀取,切片的使用等基本操作----01資料庫
- 資料清洗與預處理:使用 Python Pandas 庫Python
- Python 資料庫騷操作 — RedisPython資料庫Redis
- Python 資料庫騷操作 -- RedisPython資料庫Redis
- Python 資料庫騷操作 -- MongoDBPython資料庫MongoDB
- Python資料庫MongoDB騷操作Python資料庫MongoDB