pandas包
# 引入包
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
Series
Series 是一維帶標籤的數組,數組裏可以放任意的數據(整數,浮點數,字符串,Python Object)。其基本的創建函數是:
s = pd.Series(data, index=index)
其中 index 是一個列表,用來作爲數據的標籤。data 可以是不同的數據類型:
Python 字典
ndarray 對象
一個標量值,如 5
Series創建
s = pd.Series([1,3,5,np.nan,6,8])
Series日期創建
# 生成日期 從2013-01-01 生成至 2013-01-06
dates = pd.date_range('20130101', periods=6)
# DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04','2013-01-05', '2013-01-06'], dtype='datetime64[ns]', freq='D')
Series創建列表
# 生成2列 第一列: 012345678910 第二列: abbcdabacad
s = pd.Series(list('abbcdabacad'))
# 統計不同的列名
s.unique()
# 統計列名出現的次數
s.value_counts()
# 判斷第一列是否在列表中
s.isin(['a', 'b', 'c'])
Series索引
# 兩列一列abcde 一列5個隨機數
s = pd.Series(np.random.rand(5), index=list('abcde'))
# s的列名(第一列),是Index對象
s.index
# 添加一行 alpha
s.index.name = 'alpha'
# 返回所有第一列爲'a'的值
s['a']
# 是否有重複的index
s.index.is_unique
# 返回不重複index
s.index.unique()
# 按index分組,求出每組和
s.groupby(s.index).sum()
DataFrame
DataFrame 是二維帶行標籤和列標籤的數組。可以把 DataFrame 想你成一個 Excel 表格或一個 SQL 數據庫的表格,還可以相像成是一個 Series 對象字典。它是 Pandas 裏最常用的數據結構。
DataFrame創建
df = pd.DataFrame(np.random.randn(4, 6), index=list('ADFH'), columns=['one', 'two', 'three', 'four', 'five', 'six'])
# 添加index 如果該index沒有對應值設爲NaN
df2 = df.reindex(index=list('ABCDEFGH'))
# 重新設置col(行頭)
df.reindex(columns=['one', 'three', 'five', 'seven'])
# 把NaN值設爲默認的0
df.reindex(columns=['one', 'three', 'five', 'seven'], fill_value=0)
# fill method 只對行有效
df.reindex(columns=['one', 'three', 'five', 'seven'], method='ffill')
# 重置列index
df.reindex(index=list('ABCDEFGH'), method='ffill')
DataFrame操作
df = pd.DataFrame(np.random.randn(4, 6), index=list('ADFH'), columns=['one', 'two', 'three', 'four', 'five', 'six'])
# 所有index 爲'A' col 爲'one'的位置的值設置爲100
df.loc['A']['one'] = 100
# 捨棄index 爲'A'的行
df.drop('A')
# 捨棄columns 爲 'two' 'four'的列
df2 = df.drop(['two', 'four'], axis=1)
# 數據拷貝
df.iloc[0, 0] = 100
# 獲取index 爲'one'的行
df.loc['one']
DataFrame計算
df = pd.DataFrame(np.arange(12).reshape(4, 3), index=['one', 'two', 'three', 'four'], columns=list('ABC'))
# 每一列作爲一個 Series 作爲參數傳遞給 lambda 函數
df.apply(lambda x: x.max() - x.min())
# 每一行作爲一個 Series 作爲參數傳遞給 lambda 函數
df.apply(lambda x: x.max() - x.min(), axis=1)
# 返回多個值組成的 Series
def min_max(x):鄭州人流多少錢 http://mobile.zyyyzz.com/
return pd.Series([x.min(), x.max()], index=['min', 'max'])
df.apply(min_max, axis=1)
# applymap 逐元素計算 每個值保留2位小數
formater = '{0:.02f}'.format
df.applymap(formater)
DataFrame列選擇/增加/刪除
df = pd.DataFrame(np.random.randn(6, 4), columns=['one', 'two', 'three', 'four'])
# 第三列 爲 第一列 加上 第二列
df['three'] = df['one'] + df['two']
# 添加一個flag列 大於0爲True 否則爲False
df['flag'] = df['one'] > 0
# 刪除col爲'three'的列
del df['three']
# 獲取被刪的
four = df.pop('three')
# 選取col爲 five
df['five'] = 5
#
df['one_trunc'] = df['one'][:2]
# 指定插入位置
df.insert(1, 'bar', df['one'])
使用assign() 方法來插入新列
df = pd.DataFrame(np.random.randint(1, 5, (6, 4)), columns=list('ABCD'))
# 新列Ratio 值爲 df['A'] / df['B']
df.assign(Ratio = df['A'] / df['B'])
# 新列AB_Ratio CD_Ratio 值爲lambda表達式的值
df.assign(AB_Ratio = lambda x: x.A / x.B, CD_Ratio = lambda x: x.C - x.D)
DataFrame排序
df = pd.DataFrame(np.random.randint(1, 10, (4, 3)), index=list('ABCD'), columns=['one', 'two', 'three'])
# 按index 爲one 排序
df.sort_values(by='one')
#
s.rank()
DataFrame操作
DataFrame 在進行數據計算時,會自動按行和列進行數據對齊。最終的計算結果會合並兩個 DataFrame。
df1 = pd.DataFrame(np.random.randn(10, 4), index=list('abcdefghij'), columns=['A', 'B', 'C', 'D'])
df2 = pd.DataFrame(np.random.randn(7, 3), index=list('cdefghi'), columns=['A', 'B', 'C'])
df1 + df2
df1 - df1.iloc[0]