pandas基礎之 Series與DataFrame操作

  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]


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章