Pandas 重建索引

重建索引 會更改DataFrame的行標簽和列標簽。重新索引是指使數(shù)據(jù)與特定軸上的一組給定標簽匹配。

通過索引可以完成多個操作,例如-

重新排序現(xiàn)有數(shù)據(jù)以匹配一組新標簽。在標簽數(shù)據(jù)不存在的標簽位置中插入缺失值(NA)標記。

實例:

 import pandas as pd
 import numpy as np
 N=20
 df = pd.DataFrame({
    'A': pd.date_range(start='2016-01-01',periods=N,freq='D'),
    'x': np.linspace(0,stop=N-1,num=N),
    'y': np.random.rand(N),
    'C': np.random.choice(['Low','Medium','High'],N).tolist(),
    'D': np.random.normal(100, 10, size=(N)).tolist()
 })
 # DataFrame重建索引
 df_reindexed = df.reindex(index=[0,2,5], columns=['A', 'C', 'B'])
 print(df_reindexed)

運行結果:

           A    C     B
0  2016-01-01  Low   NaN
2  2016-01-03  High  NaN
5  2016-01-06  Low   NaN

重新索引以與其他對象對齊

您可能希望獲取一個對象并為其軸重新索引,使其標記為與另一個對象相同??紤]以下示例以了解相同的內容。

Example

 import pandas as pd
 import numpy as np
 df1 = pd.DataFrame(np.random.randn(10,3),columns=['col1','col2','col3'])
 df2 = pd.DataFrame(np.random.randn(7,3),columns=['col1','col2','col3'])
 df1 = df1.reindex_like(df2)
 print(df1)

運行結果:

         col1         col2         col3
0    -2.467652    -1.211687    -0.391761
1    -0.287396     0.522350     0.562512
2    -0.255409    -0.483250     1.866258
3    -1.150467    -0.646493    -0.222462
4     0.152768    -2.056643     1.877233
5    -1.155997     1.528719    -1.343719
6    -1.015606    -1.245936    -0.295275

在這里,df1 DataFrame像df2一樣被更改和重新索引。列名稱應匹配,否則將為整個列標簽添加NAN。

重新索引時填充

reindex() 采用可選參數(shù)方法,這是一種填充方法,其值如下

pad/ffill ? 向前填充值

bfill/backfill ? 向后填充值

nearest ? 從最接近的索引值填充

實例

 import pandas as pd
 import numpy as np
 df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
 df2 = pd.DataFrame(np.random.randn(2,3),columns=['col1','col2','col3'])
 # 填充 NAN
 print df2.reindex_like(df1)
 # 現(xiàn)在用前面的值填充NAN
 print("帶前向填充的數(shù)據(jù)幀:")
 print(df2.reindex_like(df1,method='ffill'))

運行結果:

         col1        col2       col3
0    1.311620   -0.707176   0.599863
1   -0.423455   -0.700265   1.133371
2         NaN         NaN        NaN
3         NaN         NaN        NaN
4         NaN         NaN        NaN
5         NaN         NaN        NaN

帶前向填充的數(shù)據(jù)幀:
         col1        col2        col3
0    1.311620   -0.707176    0.599863
1   -0.423455   -0.700265    1.133371
2   -0.423455   -0.700265    1.133371
3   -0.423455   -0.700265    1.133371
4   -0.423455   -0.700265    1.133371
5   -0.423455   -0.700265    1.133371

最后四行被填充。

重新編制索引時的填充限制

limit參數(shù)為重新索引時的填充提供了額外的控制。限制指定連續(xù)匹配的最大數(shù)量。讓我們考慮以下示例以了解相同的內容-

實例

 import pandas as pd
 import numpy as np
  
 df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
 df2 = pd.DataFrame(np.random.randn(2,3),columns=['col1','col2','col3'])
 # 填充 NAN
 print df2.reindex_like(df1)
 # 現(xiàn)在用前面的值填充NAN print("前向填充限制為1的數(shù)據(jù)幀:")
 print(df2.reindex_like(df1,method='ffill',limit=1))

運行結果:

         col1        col2        col3
0    0.247784    2.128727    0.702576
1   -0.055713   -0.021732   -0.174577
2         NaN         NaN         NaN
3         NaN         NaN         NaN
4         NaN         NaN         NaN
5         NaN         NaN         NaN

前向填充限制為1的數(shù)據(jù)幀:
         col1        col2        col3
0    0.247784    2.128727    0.702576
1   -0.055713   -0.021732   -0.174577
2   -0.055713   -0.021732   -0.174577
3         NaN         NaN         NaN
4         NaN         NaN         NaN
5         NaN         NaN         NaN

請注意,前面的第六行僅填充了第七行。然后,各行保持原樣。

重命名

通過rename()方法,您可以基于某些映射(字典或系列)或任意函數(shù)來重新標記軸。  
讓我們考慮以下示例以了解這一點-

  import pandas as pd
 import numpy as np
 df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
 print df1
 print ("重命名行和列之后:")
 print(df1.rename(columns={'col1' : 'c1', 'col2' : 'c2'},
 index = {0 : 'apple', 1 : 'banana', 2 : 'durian'}))

運行結果:

         col1        col2        col3
0    0.486791    0.105759    1.540122
1   -0.990237    1.007885   -0.217896
2   -0.483855   -1.645027   -1.194113
3   -0.122316    0.566277   -0.366028
4   -0.231524   -0.721172   -0.112007
5    0.438810    0.000225    0.435479

重命名行和列之后:
                c1          c2        col3
apple     0.486791    0.105759    1.540122
banana   -0.990237    1.007885   -0.217896
durian   -0.483855   -1.645027   -1.194113
3        -0.122316    0.566277   -0.366028
4        -0.231524   -0.721172   -0.112007
5         0.438810    0.000225    0.435479

     

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清