iloc函数_pandas做数据处理经常用的函数(一)

1、index 操作

  • reset_index,重置DataFrame的索引,并使用默认索引。如果DataFrame有一个多索引,则此方法可以删除一个或多个级别。
import pandas as pd
import numpy as np
df = pd.DataFrame([('bird', 389.0),
                   ('bird', 24.0),
                   ('mammal', 80.5),
                   ('mammal', np.nan)],
                  index=['falcon', 'parrot', 'lion', 'monkey'],
                  columns=('class', 'max_speed'))
#重置索引时,会将旧索引添加为列,并使用新的顺序索引:
df.reset_index(

b8114c3b4f2c1815f61f998728034caf.png
#我们可以使用drop参数来避免将旧索引添加为列
df.reset_index(drop=True)

8d1f62ca29b683e33f903615930a9f02.png
  • reindex,使用可选的填充逻辑设置DataFrame新索引
index = ['Firefox', 'Chrome', 'Safari', 'IE10', 'Konqueror']
df = pd.DataFrame({'http_status': [200, 200, 404, 404, 301],
                  'response_time': [0.04, 0.02, 0.07, 0.08, 1.0]},
                  index=index)
df

6db20bd2811765df0ce7735bdeeb0ea4.png
# 将新的列表序列作为索引
new_index = ['Safari', 'Iceweasel', 'Comodo Dragon', 'IE10',
             'Chrome']
df.reindex(new_index)

2bcda4c23c795c71d19f0ea85ae6f9ab.png
  • set_index,使用现有列设置DataFrame索引
df = pd.DataFrame({'month': [1, 4, 7, 10],
                   'year': [2012, 2014, 2013, 2014],
                   'sale': [55, 40, 84, 31]})
df

079fd66691723455b92d63808a975d72.png
df.set_index('month') 

6de589c9393fb12a54b9563b70c7bc8d.png

2、映射操作

  • map,根据输入对应关系,输出Series映射值,该方法只能作用于Series
s = pd.Series(['cat', 'dog', np.nan, 'rabbit'])
s.map({'cat': 'kitten', 'dog': 'puppy'})

0 kitten
1 puppy
2 NaN
3 NaN
dtype: object

  • apply用法与map差不多,但是其功能更加强大,Series、DataFrame都有此方法
df = pd.DataFrame([[4, 9]] * 3, columns=['A', 'B'])
df

450ce1764b21ce30159e0df43505ded8.png
df.apply(np.sqrt)  

1883c79479b7aa6628a895a9fd410b8b.png
  • applymap,将函数应用于数据框的每个元素
df = pd.DataFrame([[1, 2.12], [3.356, 4.567]])
df 

67f47dd503adb32868adc395f62576fe.png
df.applymap(lambda x: len(str(x)))

29a1d36cfd3f877b99fac6f8f624872f.png

3、索引

  • iloc,主要是基于整数位置的(从轴的0到长度1)索引,但也可以与布尔数组一起使用。
mydict = [{'a': 1, 'b': 2, 'c': 3, 'd': 4},
          {'a': 100, 'b': 200, 'c': 300, 'd': 400},
          {'a': 1000, 'b': 2000, 'c': 3000, 'd': 4000 }]
df = pd.DataFrame(mydict)
df 

9258085a606ff8ab3a651ef1bf29bde5.png
df.iloc[0, 1]
2
df.iloc[lambda x: x.index % 2 == 0]

b16419eb87d48332b3c090f4f48c3779.png
  • loc,主要基于标签的索引,但也可以与布尔数组一起使用
df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
     index=['cobra', 'viper', 'sidewinder'],
     columns=['max_speed', 'shield'])
df 

cce490a27eb570d5aebc25a5a6f1d4ed.png
df.loc['cobra', 'shield']
2
df.loc[lambda df: df['shield'] == 8] 

16c087c43f76fe8e672c2cae9c40e4f7.png

4、迭代

  • iterrows(),将DataFrame迭代为(insex, Series)
df = pd.DataFrame([[1, 1.5]], columns=['int', 'float'])
df

c4700c2c5483871baeff82932b576581.png
for index,col in df.iterrows():
    print(index)

0

#对于每一行可以通过列名访问对应的元素
for index,col in df.iterrows():
    print(col['int'],col['float'])

1.0 1.5

  • iteritems(),将DataFrame迭代为(列名, Series)对
df = pd.DataFrame({'species': ['bear', 'bear', 'marsupial'],
                  'population': [1864, 22000, 80000]},
                  index=['panda', 'polar', 'koala'])
df

0814ba0d07d691d05b2a1165f48810fa.png
for label, content in df.iteritems():
    print(label)

species
population

for label, content in df.iteritems():
    print(content[0],content[1],content[2])

bear bear marsupial

1864 22000 80000

  • itertuples(),将DataFrame迭代为元组
df = pd.DataFrame({'species': ['bear', 'bear', 'marsupial'],
                  'population': [1864, 22000, 80000]},
                  index=['panda', 'polar', 'koala'])
df

c26e3840f57dc4c3ff18463b54c6cc3f.png
for row in df.itertuples(index=True):
    print(row)

Pandas(Index='panda', species='bear', population=1864)

Pandas(Index='polar', species='bear', population=22000)

Pandas(Index='koala', species='marsupial', population=80000)

for row in df.itertuples(index=True):
    print(row[0:3])

('panda', 'bear', 1864)
('polar', 'bear', 22000)
('koala', 'marsupial', 80000)

getattr(row, 'species')

'marsupial'本文参考:官方文档

pandas documentation​pandas.pydata.org
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值