Hello,大家好,我是陈程~

明天我来分享对于8 个罕用pandas的 index设置

1. 将索引从 groupby 操作转换为列

groupby分组办法是常常用的。比方上面通过增加一个分组列team来进行分组。

>>> df0["team"] = ["X", "X", "Y", "Y", "Y"]>>> df0          A         B         C team0  0.548012  0.288583  0.734276    X1  0.342895  0.207917  0.995485    X2  0.378794  0.160913  0.971951    Y3  0.039738  0.008414  0.226510    Y4  0.581093  0.750331  0.133022    Y>>> df0.groupby("team").mean()             A         B         Cteam                              X     0.445453  0.248250  0.864881Y     0.333208  0.306553  0.443828

默认状况下,分组会将分组列编程index索引。然而很多状况下,咱们不心愿分组列变成索引,因为可能有些计算或者判断逻辑还是须要用到该列的。因而,咱们须要设置一下让分组列不成为索引,同时也能实现分组的性能。

有两种办法能够实现所需的操作,第一种是用reset_index,第二种是在groupby办法里设置as_index=False。集体更喜爱第二种办法,它只波及两个步骤,更简洁。

>>> df0.groupby("team").mean().reset_index()  team         A         B         C0    X  0.445453  0.248250  0.8648811    Y  0.333208  0.306553  0.443828>>> df0.groupby("team", as_index=False).mean()  team         A         B         C0    X  0.445453  0.248250  0.8648811    Y  0.333208  0.306553  0.443828

2. 应用现有的 DataFrame 设置索引

当然,如果曾经读取数据或做完一些数据处理步骤后,咱们能够通过set_index手动设置索引。

>>> df = pd.read_csv("data.csv", parse_dates=["date"])>>> df.set_index("date")            temperature  humiditydate                             2021-07-01           95        502021-07-02           94        552021-07-03           94        56

这里有两点须要留神下。

  1. set_index办法默认将创立一个新的 DataFrame。如果要就地更改df的索引,须要设置inplace=True
df.set_index(“date”, inplace=True)
  1. 如果要保留将要被设置为索引的列,能够设置drop=False
df.set_index(“date”, drop=False)

3. 一些操作后重置索引

在解决 DataFrame 时,某些操作(例如删除行、索引抉择等)将会生成原始索引的子集,这样默认的数字索引排序就乱了。如要从新生成间断索引,能够应用reset_index办法。

>>> df0 = pd.DataFrame(np.random.rand(5, 3), columns=list("ABC"))>>> df0          A         B         C0  0.548012  0.288583  0.7342761  0.342895  0.207917  0.9954852  0.378794  0.160913  0.9719513  0.039738  0.008414  0.2265104  0.581093  0.750331  0.133022>>> df1 = df0[df0.index % 2 == 0]>>> df1          A         B         C0  0.548012  0.288583  0.7342762  0.378794  0.160913  0.9719514  0.581093  0.750331  0.133022>>> df1.reset_index(drop=True)          A         B         C0  0.548012  0.288583  0.7342761  0.378794  0.160913  0.9719512  0.581093  0.750331  0.133022

通常,咱们是不须要保留旧索引的,因而可将drop参数设置为True。同样,如果要就地重置索引,可设置inplace参数为True,否则将创立一个新的 DataFrame。

4.排序后重置索引

当用sort_value排序办法时也会遇到这个问题,因为默认状况下,索引index跟着排序程序而变动,所以是乱雪。如果咱们心愿索引不跟着排序变动,同样须要在sort_values办法中设置一下参数ignore_index即可。

>>> df0.sort_values("A")          A         B         C team3  0.039738  0.008414  0.226510    Y1  0.342895  0.207917  0.995485    X2  0.378794  0.160913  0.971951    Y0  0.548012  0.288583  0.734276    X4  0.581093  0.750331  0.133022    Y>>> df0.sort_values("A", ignore_index=True)          A         B         C team0  0.039738  0.008414  0.226510    Y1  0.342895  0.207917  0.995485    X2  0.378794  0.160913  0.971951    Y3  0.548012  0.288583  0.734276    X4  0.581093  0.750331  0.133022    Y

5.删除反复后重置索引

删除反复项和排序一样,默认执行后也会打乱排序程序。同理,能够在drop_duplicates办法中设置ignore_index参数True即可。

>>> df0          A         B         C team0  0.548012  0.288583  0.734276    X1  0.342895  0.207917  0.995485    X2  0.378794  0.160913  0.971951    Y3  0.039738  0.008414  0.226510    Y4  0.581093  0.750331  0.133022    Y>>> df0.drop_duplicates("team", ignore_index=True)          A         B         C team0  0.548012  0.288583  0.734276    X1  0.378794  0.160913  0.971951    Y

6. 索引的间接赋值

当咱们有了一个 DataFrame 时,想要应用不同的数据源或独自的操作来调配索引。在这种状况下,能够间接将索引调配给现有的 df.index

>>> better_index = ["X1", "X2", "Y1", "Y2", "Y3"]>>> df0.index = better_index>>> df0           A         B         C teamX1  0.548012  0.288583  0.734276    XX2  0.342895  0.207917  0.995485    XY1  0.378794  0.160913  0.971951    YY2  0.039738  0.008414  0.226510    YY3  0.581093  0.750331  0.133022    Y

7.写入CSV文件时疏忽索引

数据导出到 CSV 文件时,默认 DataFrame 具备从 0 开始的索引。如果咱们不想在导出的 CSV 文件中蕴含它,能够在to_csv办法中设置index参数。

>>> df0.to_csv("exported_file.csv", index=False)

如下所示,导出的 CSV 文件中,索引列未蕴含在文件中。

其实,很多办法中都有对于索引的设置,只不过大家个别比较关心数据,而常常疏忽了索引,才导致持续运行时可能会报错。以上几个高频的操作都是有索引设置的,倡议大家平时用的时候养成设置索引的习惯,这样会节俭不少工夫。

8.读取时指定索引列

很多状况下,咱们的数据源是 CSV 文件。假如有一个名为的文件data.csv,蕴含以下数据。

date,temperature,humidity07/01/21,95,5007/02/21,94,5507/03/21,94,56

默认状况下,pandas将会创立一个从0开始的索引行,如下:

>>> pd.read_csv("data.csv", parse_dates=["date"])        date  temperature  humidity0 2021-07-01           95        501 2021-07-02           94        552 2021-07-03           94        56

然而,咱们能够在导入过程中通过将index_col参数设置为某一列能够间接指定索引列。

>>> pd.read_csv("data.csv", parse_dates=["date"], index_col="date")            temperature  humiditydate                             2021-07-01           95        502021-07-02           94        552021-07-03           94        56

最初

喜爱的小伙伴能够点个赞和关注哦~感激你的反对!