คุณรู้วิธีรับดัชนีหรือคอลัมน์ของ DataFrame เป็นรายการ NumPy หรือรายการหลามหรือไม่
คุณรู้วิธีรับดัชนีหรือคอลัมน์ของ DataFrame เป็นรายการ NumPy หรือรายการหลามหรือไม่
คำตอบ:
ในการรับอาร์เรย์ NumPy คุณควรใช้values
แอตทริบิวต์:
In [1]: df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=['a', 'b', 'c']); df
A B
a 1 4
b 2 5
c 3 6
In [2]: df.index.values
Out[2]: array(['a', 'b', 'c'], dtype=object)
วิธีนี้จะเข้าถึงวิธีจัดเก็บข้อมูลอยู่แล้วดังนั้นจึงไม่จำเป็นต้องมีการแปลง
หมายเหตุ: แอททริบิวนี้มีให้สำหรับวัตถุแพนด้าอื่น ๆ อีกมากมาย
In [3]: df['A'].values
Out[3]: Out[16]: array([1, 2, 3])
ในการรับดัชนีเป็นรายการโทรtolist
:
In [4]: df.index.tolist()
Out[4]: ['a', 'b', 'c']
และในทำนองเดียวกันสำหรับคอลัมน์
.values
เลิกใช้แล้ว.to_numpy()
เป็นการแทนที่ที่แนะนำถ้าคุณต้องการอาร์เรย์ NumPy คุณสามารถขยายการเข้าถึงวิธีนี้ข้อมูลถูกเก็บไว้แล้วจึงไม่จำเป็นต้องมีการแปลง ?
คุณสามารถใช้ในการเข้าถึงวัตถุดัชนีและจากนั้นได้รับค่าในรายการโดยใช้df.index
df.index.tolist()
ในทำนองเดียวกันคุณสามารถใช้df['col'].tolist()
สำหรับซีรี่ส์
df.index.values.tolist()
df.index.tolist()
ไม่ส่งคืนเมธอดอินสแตนซ์ มันจะส่งคืนรายการดัชนี มันเป็นวิธีการที่กำหนดไว้ในดัชนีแพนด้า ในขณะที่เรียกค่าแรกคือความเป็นไปได้การมอบหมายงานให้กับ numpy ไม่ใช่การแก้ไข - เป็นทางเลือก
.values
ในความโปรดปรานของวิธีการเหล่านี้!จาก v0.24.0 เป็นต้นไปเราจะมีสองตบแบรนด์ใหม่วิธีการที่แนะนำสำหรับการได้รับอาร์เรย์ NumPy จากIndex
, Series
และDataFrame
วัตถุที่พวกเขามีและto_numpy()
.array
เกี่ยวกับการใช้งานเอกสารกล่าวถึง:
เราไม่ได้ลบหรือเลิกใช้งาน
Series.values
หรือDataFrame.values
แต่เราขอแนะนำและใช้.array
หรือ.to_numpy()
แทน
ดูส่วนนี้ของบันทึกประจำรุ่น v0.24.0สำหรับข้อมูลเพิ่มเติม
df.index.to_numpy()
# array(['a', 'b'], dtype=object)
df['A'].to_numpy()
# array([1, 4])
ตามค่าดีฟอลต์แล้วมุมมองจะถูกส่งคืน การดัดแปลงใด ๆ ที่ทำจะมีผลกับต้นฉบับ
v = df.index.to_numpy()
v[0] = -1
df
A B
-1 1 2
b 4 5
หากคุณต้องการสำเนาให้ใช้to_numpy(copy=True
);
v = df.index.to_numpy(copy=True)
v[-1] = -123
df
A B
a 1 2
b 4 5
โปรดทราบว่าฟังก์ชั่นนี้ใช้ได้กับDataFrames ด้วย (ในขณะที่ใช้.array
ไม่ได้)
array
แอตทริบิวต์แอตทริบิวต์
นี้ส่งคืนExtensionArray
วัตถุที่อยู่ด้านหลังดัชนี / ซีรี่ส์
pd.__version__
# '0.24.0rc1'
# Setup.
df = pd.DataFrame([[1, 2], [4, 5]], columns=['A', 'B'], index=['a', 'b'])
df
A B
a 1 2
b 4 5
df.index.array
# <PandasArray>
# ['a', 'b']
# Length: 2, dtype: object
df['A'].array
# <PandasArray>
# [1, 4]
# Length: 2, dtype: int64
จากที่นี่เป็นไปได้ที่จะได้รับรายการโดยใช้list
:
list(df.index.array)
# ['a', 'b']
list(df['A'].array)
# [1, 4]
หรือโทรโดยตรง.tolist()
:
df.index.tolist()
# ['a', 'b']
df['A'].tolist()
# [1, 4]
เกี่ยวกับสิ่งที่ส่งคืนเอกสารกล่าวถึง
สำหรับ
Series
และIndex
ES รับการสนับสนุนจากอาร์เรย์ NumPy ปกติSeries.array
จะกลับมาใหม่arrays.PandasArray
ซึ่งเป็นบาง (ไม่มีสำเนา)numpy.ndarray
เสื้อคลุมรอบarrays.PandasArray
ไม่ได้มีประโยชน์เป็นพิเศษในตัวมันเอง แต่มันให้อินเทอร์เฟซเดียวกับส่วนขยายใด ๆ ที่กำหนดไว้ในแพนด้าหรือห้องสมุดบุคคลที่สาม
ดังนั้นเพื่อสรุป.array
จะกลับมาทั้ง
ExtensionArray
สำรองข้อมูลดัชนี / ซีรี่ส์ที่มีอยู่หรือExtensionArray
วัตถุใหม่จะถูกสร้างขึ้นเป็น wrapper ที่บางกว่าอาร์เรย์ที่อยู่ข้างใต้เหตุผลในการเพิ่มสองวิธีการใหม่
ฟังก์ชั่นเหล่านี้ได้ถูกเพิ่มเป็นผลจากการอภิปรายภายใต้สองประเด็น GitHub GH19954และGH23623
โดยเฉพาะเอกสารที่กล่าวถึงเหตุผล:
[... ] กับ
.values
มันไม่ชัดเจนว่าค่าที่ส่งคืนจะเป็นอาร์เรย์จริงการเปลี่ยนแปลงของมันบางส่วนหรือหนึ่งในอาร์เรย์ที่กำหนดเองของแพนด้า (เหมือนCategorical
) ตัวอย่างเช่นด้วยPeriodIndex
,.values
สร้างใหม่ndarray
ของรอบระยะเวลาวัตถุในแต่ละครั้ง [ ... ]
ฟังก์ชันทั้งสองนี้มีจุดประสงค์เพื่อปรับปรุงความสอดคล้องของ API ซึ่งเป็นขั้นตอนหลักในทิศทางที่ถูกต้อง
สุดท้ายนี้.values
จะไม่ถูกคัดค้านในเวอร์ชันปัจจุบัน แต่ฉันคาดว่าสิ่งนี้อาจเกิดขึ้นในอนาคตดังนั้นฉันจึงขอให้ผู้ใช้โยกย้ายไปยัง API ที่ใหม่กว่าโดยเร็วที่สุด
หากคุณกำลังจัดการกับ dataframe หลายดัชนีคุณอาจสนใจที่จะแยกคอลัมน์ของชื่อเดียวของ multi-index คุณสามารถทำสิ่งนี้เป็น
df.index.get_level_values('name_sub_index')
และแน่นอนname_sub_index
จะต้องเป็นองค์ประกอบของFrozenList
df.index.names
ตั้งแต่ pandas v0.13 คุณสามารถใช้get_values
:
df.index.get_values()
get_values
.values
มันเป็นตัวอักษรมากขึ้นในการพิมพ์
ผมแปลงหมีแพนด้าdataframe
ไปแล้วใช้ขั้นพื้นฐานlist
list.index()
บางสิ่งเช่นนี้
dd = list(zone[0]) #Where zone[0] is some specific column of the table
idx = dd.index(filename[i])
idx
คุณมีคุณค่าดัชนีเป็น
วิธีล่าสุดในการทำเช่นนี้คือการใช้ฟังก์ชัน. to_numpy ()
ถ้าฉันมีชื่อไฟล์ที่มีคอลัมน์ 'ราคา' ฉันสามารถแปลงได้ดังนี้:
priceArray = df['price'].to_numpy()
นอกจากนี้คุณยังสามารถส่งชนิดข้อมูลเช่น float หรือวัตถุเป็นอาร์กิวเมนต์ของฟังก์ชัน
ด้านล่างเป็นวิธีง่าย ๆ ในการแปลงคอลัมน์ dataframe ให้เป็นอาร์เรย์แบบ numpy
df = pd.DataFrame(somedict)
ytrain = df['label']
ytrain_numpy = np.array([x for x in ytrain['label']])
ytrain_numpy เป็นอาร์เรย์ numpy
ฉันลองด้วยto.numpy()
แต่มันทำให้ฉันมีข้อผิดพลาดด้านล่าง:
TypeError: ไม่รองรับการแปลงสำหรับประเภท: (dtype ('O'),)ในขณะที่กำลังทำการจำแนกประเภทความเกี่ยวข้องแบบไบนารีโดยใช้ Linear SVC to.numpy () กำลังแปลง dataFrame ไปเป็น numpy array แต่ชนิดข้อมูลขององค์ประกอบภายในเป็นรายการเนื่องจากข้อผิดพลาดดังกล่าวถูกตรวจพบ
to_numpy
แต่