Python Pandas - การทำดัชนีใหม่

Reindexingเปลี่ยนป้ายชื่อแถวและป้ายชื่อคอลัมน์ของ DataFrame ในการจัดทำดัชนีใหม่หมายถึงการปรับข้อมูลให้ตรงกับชุดของป้ายกำกับที่กำหนดตามแกนเฉพาะ

การดำเนินการหลายอย่างสามารถทำได้ผ่านการสร้างดัชนีเช่น -

  • จัดลำดับข้อมูลที่มีอยู่ใหม่เพื่อให้ตรงกับป้ายกำกับชุดใหม่

  • ใส่เครื่องหมายค่าที่ขาดหายไป (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()
})

#reindex the DataFrame
df_reindexed = df.reindex(index=[0,2,5], columns=['A', 'C', 'B'])

print df_reindexed

มัน output มีดังนี้ -

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

Reindex เพื่อจัดแนวกับวัตถุอื่น ๆ

คุณอาจต้องการนำวัตถุและทำดัชนีแกนของมันอีกครั้งเพื่อให้มีป้ายกำกับเหมือนกับวัตถุอื่น พิจารณาตัวอย่างต่อไปนี้เพื่อให้เข้าใจตรงกัน

ตัวอย่าง

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

มัน output มีดังนี้ -

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

Note - ที่นี่ df1 DataFrame ได้รับการเปลี่ยนแปลงและจัดทำดัชนีใหม่เช่น df2. ชื่อคอลัมน์ควรตรงกันไม่เช่นนั้นจะเพิ่ม NAN สำหรับป้ายชื่อคอลัมน์ทั้งหมด

กรอกข้อมูลขณะทำดัชนีใหม่

reindex() ใช้วิธีพารามิเตอร์ทางเลือกซึ่งเป็นวิธีการเติมที่มีค่าดังนี้ -

  • 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'])

# Padding NAN's
print df2.reindex_like(df1)

# Now Fill the NAN's with preceding Values
print ("Data Frame with Forward Fill:")
print df2.reindex_like(df1,method='ffill')

มัน output มีดังนี้ -

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

Data Frame with Forward Fill:
         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

Note - เบาะสี่แถวสุดท้าย

ขีด จำกัด ในการเติมขณะทำดัชนีใหม่

อาร์กิวเมนต์ จำกัด ให้การควบคุมเพิ่มเติมเกี่ยวกับการเติมในขณะที่ทำดัชนีใหม่ ขีด จำกัด ระบุจำนวนสูงสุดของการแข่งขันติดต่อกัน ให้เราพิจารณาตัวอย่างต่อไปนี้เพื่อทำความเข้าใจเช่นเดียวกัน -

ตัวอย่าง

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'])

# Padding NAN's
print df2.reindex_like(df1)

# Now Fill the NAN's with preceding Values
print ("Data Frame with Forward Fill limiting to 1:")
print df2.reindex_like(df1,method='ffill',limit=1)

มัน output มีดังนี้ -

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

Data Frame with Forward Fill limiting to 1:
         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

Note- สังเกตเฉพาะแถวที่ 7 เท่านั้นที่เต็มไปด้วยแถวที่ 6 ก่อนหน้า จากนั้นแถวจะเหลือตามที่เป็นอยู่

การเปลี่ยนชื่อ

วิธีการเปลี่ยนชื่อ () ช่วยให้คุณสามารถกำหนดชื่อแกนใหม่ตามการแมปบางส่วน (คำสั่งหรือชุดข้อมูล) หรือฟังก์ชันโดยพลการ

ให้เราพิจารณาตัวอย่างต่อไปนี้เพื่อทำความเข้าใจสิ่งนี้ -

import pandas as pd
import numpy as np

df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
print df1

print ("After renaming the rows and columns:")
print df1.rename(columns={'col1' : 'c1', 'col2' : 'c2'},
index = {0 : 'apple', 1 : 'banana', 2 : 'durian'})

มัน output มีดังนี้ -

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

After renaming the rows and columns:
                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

วิธีการเปลี่ยนชื่อ () ให้ไฟล์ inplaceพารามิเตอร์ที่ตั้งชื่อซึ่งโดยค่าเริ่มต้นคือ False และคัดลอกข้อมูลพื้นฐาน ผ่านinplace=True เพื่อเปลี่ยนชื่อข้อมูลในสถานที่