pandas資料的索引操作

2021-08-16 00:19:15 字數 3779 閱讀 1692

# coding: utf-8

# # series索引

# ## 行索引

import pandas as pd

import numpy as np

ser_obj = pd.series(range(5),index=['a','b','c','d','e'])

print ser_obj

# 行索引獲單個值

print ser_obj['b'],ser_obj['e']

# 切片索引

print ser_obj[1:3]

print ser_obj['b':'d']

# 不連續索引

print ser_obj[[0,2,4]]

print ser_obj[['a','e','d']]

# 布林索引

arr = np.arange(5)

print ser_obj[arr>2]

# # dateframe索引

# ## 行索引

# ## 列索引

df_obj = pd.dataframe(np.random.rand(5,4))

print df_obj

df_obj = pd.dataframe(np.random.rand(5,4),columns=['a','b','c','d'],

index=['a','b','c','d','e'])

print df_obj

# 通過屬性設定行索引和列索引

#df_obj.columns =

#df_obj.index =

#列索引

print df_obj['a']

print df_obj['b']

print

type(df_obj['c'])

print df_obj[['a']]

print df_obj[['b']]

print

type(df_obj['c'])

print df_obj[['a','c','d']]

# # pandas 的三種索引方式

# * 位置索引:012345

# * 標籤索引:'a','b','c'

# * 混合索引:標籤索引和位置索引同時使用

ser_obj = pd.series(range(5),index=['a','b','c','d','e'])

# 標籤索引

print ser_obj['b':'e']

print ser_obj.loc['b':'e']

# 位置索引

print ser_obj[0:2]

print ser_obj.iloc[0:2]

# #混合索引,用在dataframe中

# print df_obj

# print df_obj.ix[0:2,'a':'b'] #先按行索引的位置取值,再按列索引的標籤取值

# print df_obj.ix[0:2,0:2] ##先按行索引的位置取值,再按列索引的位置取值

# # 運算與對其

# * 按照索引進行對其運算

# * series 按行索引對齊運算

# * dataframe 按照行索引和列索引對齊運算

s1 = pd.series(range(10,20),index=range(10))

s2 = pd.series(range(20,25),index=range(5))

print s1

print s2

# series 對齊運算,如果兩個物件中的某行資料只有乙個物件有資料,另乙個物件沒有,

那麼這一行的值為nan

s1 + s2

df1 = pd.dataframe(np.ones((2,2)),columns=['a','b'])

df2 = pd.dataframe(np.ones((3,3)),columns=['a','b','c'])

print df1

print df2

# dataframe 對齊運算

df1 + df2

print s1 + s2

print

'*****'

# fill_value() 在對齊時如果一方沒有資料可以採用fill_value()的值,保證對齊

s1.add(s2,fill_value=20)

# fill_value():add(+),sub(-),div(*),mul(/)

# fillna()函式

s3 = s1+s2

print s3

print s3.fillna(-1) # -1只是表示一種資料異常的狀態,不讓它顯示nan

df3 = df1+df2

print df3.fillna(10)

df1.add(df2,fill_value=1)

# # 其他函式

# #

#求絕對值的函式

df = pd.dataframe(np.random.randn(5,4))

print df

print np.abs(df)

f = lambda x:x.max()

# ,axis=1,該引數值預設為0表示列,1表示行

f = lambda x:abs(x)

f = lambda x:'%.2f'%x

# sort_index():按索引排序

# sort_values():按值排序

s = pd.series(range(10,15),index = np.random.randint(5,size=5))

print s

print s.sort_index()

print s.sort_values()

#dataframe排序時注意區分按照行資料排序,還是按照列資料進行排序

df=pd.dataframe(np.random.randn(3,4),columns=np.random.randint(4,size=4),index=np.random.randint(3,size=3))

print df

df.sort_index()

df.sort_index(axis=1)

df.sort_index(axis=1,ascending=false) # ascending=false

按照降序進行排列,ascending=true 按照公升序進行排列

# dataframe 按值進行排序

df = pd.dataframe(np.random.randn(3,4),index=[1,2,3],columns=[1,2,3,4])

df.sort_values(by=2,ascending=false) #by:要排序的列號,ascending調整公升降序

# 按多列排序;多列排序的時候優先根據第乙個列排序,如果第一列有相同資料,再按第二列排序

print df.sort_values(by=[2,3],ascending =[0,1])

# 關於缺失資料的相關方法

#isnull():判斷所有資料書否為nan,返回有個bool陣列

df = pd.dataframe([np.random.randn(3),[1,np.nan,np.nan],

[2,np.nan,np.nan],[3,np.nan,np.nan]])

print df

print df.isnull()

#dropna():根據行刪除資料,只要本行中含有nan,就將其刪除

print df.dropna()

pandas分層索引的操作

pandas文件 arrays bar bar baz baz foo foo qux qux one two one two one two one two tuples index list zip arrays index pd.multiindex.from tuples tuples,na...

pandas資料選擇(索引)

import pandas as pd import numpy as npdates pd.date range 20180101 periods 6 df pd.dataframe np.arange 24 reshape 6,4 index dates,columns a b c d prin...

資料分析工具Pandas 索引操作總結

pandas中,使用索引獲取資料的方式可歸納為3種 1.loc,標籤索引 2.iloc,位置索引 loc與iloc主要用於行索引,其中,使用名稱 標籤的切片索引是包含末尾位置的。3.布林值遮罩 對應位置為true的時候,則取得該資料。in 1 import pandas as pdimport nu...