关于python:8-个常用pandas的-index设置你知道吗

48次阅读

共计 4639 个字符,预计需要花费 12 分钟才能阅读完成。

Hello, 大家好,我是陈程~

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

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

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

>>> df0["team"] = ["X", "X", "Y", "Y", "Y"]
>>> df0
          A         B         C team
0  0.548012  0.288583  0.734276    X
1  0.342895  0.207917  0.995485    X
2  0.378794  0.160913  0.971951    Y
3  0.039738  0.008414  0.226510    Y
4  0.581093  0.750331  0.133022    Y
>>> df0.groupby("team").mean()
             A         B         C
team                              
X     0.445453  0.248250  0.864881
Y     0.333208  0.306553  0.443828

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

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

>>> df0.groupby("team").mean().reset_index()
  team         A         B         C
0    X  0.445453  0.248250  0.864881
1    Y  0.333208  0.306553  0.443828
>>> df0.groupby("team", as_index=False).mean()
  team         A         B         C
0    X  0.445453  0.248250  0.864881
1    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  humidity
date                             
2021-07-01           95        50
2021-07-02           94        55
2021-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         C
0  0.548012  0.288583  0.734276
1  0.342895  0.207917  0.995485
2  0.378794  0.160913  0.971951
3  0.039738  0.008414  0.226510
4  0.581093  0.750331  0.133022
>>> df1 = df0[df0.index % 2 == 0]
>>> df1
          A         B         C
0  0.548012  0.288583  0.734276
2  0.378794  0.160913  0.971951
4  0.581093  0.750331  0.133022
>>> df1.reset_index(drop=True)
          A         B         C
0  0.548012  0.288583  0.734276
1  0.378794  0.160913  0.971951
2  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 team
3  0.039738  0.008414  0.226510    Y
1  0.342895  0.207917  0.995485    X
2  0.378794  0.160913  0.971951    Y
0  0.548012  0.288583  0.734276    X
4  0.581093  0.750331  0.133022    Y
>>> df0.sort_values("A", ignore_index=True)
          A         B         C team
0  0.039738  0.008414  0.226510    Y
1  0.342895  0.207917  0.995485    X
2  0.378794  0.160913  0.971951    Y
3  0.548012  0.288583  0.734276    X
4  0.581093  0.750331  0.133022    Y

5. 删除反复后重置索引

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

>>> df0
          A         B         C team
0  0.548012  0.288583  0.734276    X
1  0.342895  0.207917  0.995485    X
2  0.378794  0.160913  0.971951    Y
3  0.039738  0.008414  0.226510    Y
4  0.581093  0.750331  0.133022    Y
>>> df0.drop_duplicates("team", ignore_index=True)
          A         B         C team
0  0.548012  0.288583  0.734276    X
1  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 team
X1  0.548012  0.288583  0.734276    X
X2  0.342895  0.207917  0.995485    X
Y1  0.378794  0.160913  0.971951    Y
Y2  0.039738  0.008414  0.226510    Y
Y3  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,humidity
07/01/21,95,50
07/02/21,94,55
07/03/21,94,56

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

>>> pd.read_csv("data.csv", parse_dates=["date"])
        date  temperature  humidity
0 2021-07-01           95        50
1 2021-07-02           94        55
2 2021-07-03           94        56

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

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

最初

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

正文完
 0