วิธีที่เร็วที่สุดในการ Zero dataframe / column ใน Python Pandas

Aug 18 2020

มีวิธีที่เร็วกว่าในการทำให้คอลัมน์ดาต้าเฟรมของแพนด้าเป็นศูนย์ได้เร็วกว่าการวนซ้ำผ่านดาต้าเฟรมเช่นนี้หรือไม่ (โดยที่ A, B และ C เป็นชื่อคอลัมน์):

while x < Framelength
   dg.iloc[x, A] = 0
   dg.iloc[x, B] = 0
   dg.iloc[x, C] = 0
   x+=1

ฉันโอเคกับการทำให้ดาต้าเฟรมเป็นศูนย์หากจะเร็วกว่านี้

คำตอบ

2 BENY Aug 19 2020 at 02:14

ตรวจสอบกับ

cols=[...]
df.loc[:, cols]=0
1 anon01 Aug 19 2020 at 02:38

คุณสามารถเป็นศูนย์จากดาต้าเฟรมทั้งหมด:

df[df.columns] = 0

หรือระบุรายการ (ทำซ้ำได้) ของคอลัมน์:

cols = list("ABC")
df[cols] = 0
1 MarcosTidball Aug 19 2020 at 02:14

สำหรับการทำให้แถวทั้งหมดในคอลัมน์เป็นศูนย์โดยการเรียกชื่อคอลัมน์คุณสามารถทำสิ่งต่างๆเช่น:

df["A"] = 0
df["B"] = 0

หากคุณต้องการให้ DataFrame เป็นศูนย์แม้ว่าฉันเชื่อว่าสิ่งนี้ควรมีประสิทธิภาพมาก:

for c in df:
    df[c].values[:] = 0
N.Arunoprayoch Aug 19 2020 at 02:21

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

import pandas as pd
df = pd.DataFrame({'A': [1,2,3,4,5], 'B': [34,63,2,5,0]})

# Approach
df.columns = [0 for _ in df.columns]
df[df!=0] = 0

# Result
    0   0
0   0   0
1   0   0
2   0   0
3   0   0
4   0   0
ScottBoston Aug 19 2020 at 03:03

ลองสิ่งนี้โดยใช้valuesแอตทริบิวต์ของ dataframe และnp.array.fill:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(0,100,(5,5)), index=[*'abcde'], columns=[*'ABCDE'])

print(df)
#     A   B   C   D   E
# a  94  96  76  99  34
# b  88  63  17  51  46
# c  92  64  32  12  23
# d  88  89  43  34  50
# e  93  37  70  27  40

df.values.fill(0)

print(df)
#    A  B  C  D  E
# a  0  0  0  0  0
# b  0  0  0  0  0
# c  0  0  0  0  0
# d  0  0  0  0  0
# e  0  0  0  0  0