数据集
先建立好如下数据:
import pandas as pd
df = pd.DataFrame([['乔峰', '男', 95, '降龙十八掌', '主角'],
['虚竹', '男', 93, '天上六阳掌', '主角'],
['段誉', '男', 92, '六脉神剑', '主角'],
['王语嫣', '女', 95,'熟知武诀', '主角'],
['包不同', '男', 65, '胡搅蛮缠', '配角'],
['康敏', '女', 40, '惑夫妒人', '配角']],
index=list('abcdef'.upper()),
columns=['name', 'gender', 'score', 'skill', 'class'])
df
结果如下:
loc索引
这个loc索引非常灵活,所以搞得也有一点复杂。
1.完整
df.loc[["D"],:]#逗号前面是行后面是列,注意这个方法针对的是
#知道行索引和列索引的情况,并且返回的仍然是一个dataframe
2.单纯行索引
df.loc[["A","B"]]#也是返回dataframe
3.只有一个[],没有嵌套,返回series.
df.loc["A"]
所以我们可以使用上述返回某一个值,例如:
df.loc["A"]["name"]
iloc索引
我们现在要索引“王语嫣”,使用iloc
应该如何?
数一下,发现其坐标是(3,0)。
df.iloc[3,0]
结果如下:
还有多次的索引例如索引第2行和第3行:
df.iloc[[1,2]]
那么series
数据结构如何使用iloc
索引呢?
#列索引直接得到series
dfn=df["name"]
print(type(dfn))
dfn
series
使用iloc
要注意的是,由于只有一列,所以iloc的行标照常写,列标由于一定是0,不用写了,写了将报错!
dfn.iloc[3]
最后提醒一下,iloc
的行标和列标是严格顺序数下来的,和你的.index
没有关系,即使上面数据的.index
由原来的[A,B,C,D,E,F]换成[5,4,3,2,1,0],dfn.iloc[0]
是输出“乔峰”,而不是“康敏”。
特殊索引
下面是我们很常见的一种办法,比较简洁。
df[:2]#其等价于df.iloc[:2]
#其中2代表前两行的意思,并不是行索引
#返回的是dataframe
修改索引
1.dataframe.index
赋值进行整体修改。
index=[i for i in range(df.shape[0])]
df.index=index
df
注意到,单个修改将报错。
print(df.index)
df.index[3]=10
2.使用rename
实现单个修改。
df.rename(index={3:10})
注意:上面没有实现真正的修改,真正修改可以:
df.rename(index={3:10},inplace=True)
#或者
df=df.rename(index={3:10})
修改columns索引的内容和index类似。
df.columns
有人问:如何遍历dataframe?
这太简单了,我们不是会使用了iloc吗?
iloc遍历其中一个元素上面已经讲了。那么如何遍历一行?(以第一行为例)。
df.iloc[0,:]