【pandas教程】索引操作

选择、修改数据(单层索引)

推荐使用.at、.iat、.loc、.iloc

操作句法结果备注选择列df[col]Series基于列名(列的标签),返回Series用标签选择行df.loc[label]Series基于行名、列名(行、列的标签),默认为df.loc(axis=0)[label]用函数选择行df.loc[lambda,lambda]Series基于行名、列名(行、列的数值),默认为df.loc(axix=0)[lambda]用整数位置选择行df.iloc[loc]Series基于行、列的位置(行、列的数值索引)选择列df[[col]]DataFrame基于列名(列的标签),返回DataFrame行切片df[5:10]DataFrame基于行、列的位置(行、列的数值索引)用布尔向量选择行df[bool_vec]DataFrame混合方式df.xs(col, axis=1)DataFrame基于行、列的标签(需指定axis=0或1)用列名选择列df.colDataFrame基于列名(列的标签),同df[col]


df['A']

df[0:3]

df['20130102':'20130104']

df.loc[dates[0]]

df.loc[:, ['A','B']]

df.loc['20130102':'20130104', ['A','B']]

df.loc[['A', 'B']] = df.loc[['A','B']]

df.iloc[0]

df.iloc[:, [0,2]]

df.iloc[0,[0,2]] = {'x':9,'y':99}

df.at['20130101','A'] 等同于 df.loc['20130101', 'A']
df.iat[0,0] 等同于 df.iloc[0,0]

df1 = df.reindex(index=dates[0:4], columns=list(df.columns) + ['E'])

df.loc['A':'C']

df.iloc[:, 1000:1001]

df.iloc[:, 0:5]

df.iloc[:, [2]]

df.[lambda df: df.columns[0]]

df.loc(axis=1)[lambda x: x['col'].str.contains('keyword')]

df.loc[lambda x: x['col'].isin(that['col'].to_list())]

重置索引

当对df进行筛选后行索引会不连续,如需将索引转为连续索引,使用reset_index

df.reset_index()
df.reset_index(drop=True)

重建索引


s = pd.DataFrame(np.random.randn(5,3), index=['a', 'b', 'c', 'd', 'e'],columns=['one','two','three'])
s.reindex(index=['e', 'b', 'f', 'd'])
s.reindex(['e', 'b', 'f', 'd'], axis='index')
s.reindex(df.index)
s.reindex(columns=['three','two','one'])
s.reindex(['three','two','one'], axis='columns')

df1.reindex_like(df2)

方法动作pad / ffill先前填充bfill / backfill向后填充nearest从最近的索引值填充


df1.reindex(df2.index, method='ffill')

df1.reindex(df2.index).fillna(method='ffill')

df1.reindex(df2.index, method='bfill')

df1.reindex(df2.index).fillna(method='bfill')

df1.reindex(df2.index, method='nearest')

df1.reindex(df2.index).fillna(method='nearest')

df1.reindex(df2.index, method='ffill', limit=1)
df1.reindex(df2.index, method='ffill', tolerance='1 day')

df.rename(index={'a':'apple', 'b':'banana'}, columns={'one': '1', 'two':'2'})
df.rename({'a':'apple', 'b':'banana'}, axis='index')
df.rename({'one': '1', 'two':'2'}, axis='columns')

布尔索引


df[df['A'] > 0]

df[df > 0]

df[df.index.isin(['2013-01-01', '2021-01-03'])]

布尔运算符进行多条件筛选

符号作用|or&and~not


df[(df['A'] > 0 ) | (df['A'] < 1)]
df[(df['A'] > 0) & (df['A'] < 1)]
df[~df['A'] > 0]

s_mi = pd.Series(np.arange(6), index=pd.MultiIndex.from_product([0,1],['a','b','c']))
s_mi.iloc[s_mi.index.isin([(1,'a'),(2,'b')])]
s_mi.iloc[s_mi.index.isin(['a','b',,'c'], level=1)]

df.isin()

df =pd.DataFrame({'vals':[1,2,3,4],'ids':['a','b','f','n'],'ids2':['a','n','c','n']})
values ={'ids':['a','b'],'vals':[1,3]}
row_mask =df.isin(values).any(1)
row_mask =df.isin(values).all(1)

df.where(df>0, df['A'],axis='index',level=1)

df.mask(df>0,df['A'],axis='index',level=1)

使用query实现布尔运算


df.query('a < b & b < c')

df.query('color == "red"')

df.query('ilevel_0 =="red"')

df.query('color type == "red" ')

df.query(' a + b < c ')

df.query(' ( a > 0 & a < 5 ) | ( a < 0 & a > -5 )')

比较操作

支持的比较操作

缩写作用eq等于ne不等于lt小于gt大于le小于等于ge大于等于


df.gt(df2)

布尔简化


(df > 0).all()
pd.Series([True]).bool()

支持的布尔简化操作

缩写作用例子empty()判空s.empty()any()或运算s.any()all()且运算s.all()bool()验证单个元素的布尔值

nan值比较


np.nan == np.nan
np.nan.equals(np.nan)
np.isna(np.nan)

equals()比较


df1 = pd.DataFrame({'col':['foo', 0, np.nan]})
df2 = pd.DataFrame({'col':[np.nan,0,'foo']}, index=[2,1,0])
df1.equals(df2)
df1.equals(df2.reset_index())

Original: https://blog.csdn.net/ljp7759325/article/details/124504739
Author: 鱼摆摆
Title: 【pandas教程】索引操作

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/640146/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球