อ็อพชัน low_memory ที่เลิกใช้แล้ว
low_memory
ตัวเลือกไม่ได้เลิกใช้อย่างถูกต้อง แต่มันควรจะเป็นเพราะมันไม่จริงทำอะไรที่แตกต่างกัน [ แหล่ง ]
เหตุผลที่คุณได้low_memory
รับคำเตือนนี้ก็เพราะว่าการเดา dtypes สำหรับแต่ละคอลัมน์นั้นเป็นสิ่งที่จำเป็นมาก Pandas พยายามกำหนด dtype ที่จะตั้งค่าโดยการวิเคราะห์ข้อมูลในแต่ละคอลัมน์
การเดา Dtype (แย่มาก)
นุ่นสามารถกำหนดได้ว่า dtype คอลัมน์ใดควรมีเมื่ออ่านไฟล์ทั้งหมดแล้ว นี่หมายความว่าไม่มีการแยกวิเคราะห์อะไรจริง ๆ ก่อนที่จะอ่านไฟล์ทั้งหมดเว้นแต่ว่าคุณมีความเสี่ยงที่จะต้องเปลี่ยนประเภทของคอลัมน์นั้นเมื่อคุณอ่านค่าสุดท้าย
ลองพิจารณาตัวอย่างหนึ่งไฟล์ที่มีคอลัมน์ชื่อ user_id มันมี 10 ล้านแถวที่ user_id เป็นตัวเลขเสมอ เนื่องจากแพนด้าไม่สามารถรู้ได้ว่ามันเป็นเพียงตัวเลขมันอาจจะเก็บเป็นสตริงเดิมจนกว่ามันจะอ่านไฟล์ทั้งหมด
การระบุชนิด (ควรทำเสมอ)
เพิ่ม
dtype={'user_id': int}
การpd.read_csv()
โทรจะทำให้แพนด้าทราบเมื่อมันเริ่มอ่านไฟล์ว่านี่เป็นจำนวนเต็มเท่านั้น
สิ่งที่ควรสังเกตก็คือถ้าบรรทัดสุดท้ายในไฟล์"foobar"
เขียนลงในuser_id
คอลัมน์การโหลดจะล้มเหลวหากระบุ dtype ด้านบน
ตัวอย่างของข้อมูลที่ใช้งานไม่ได้ซึ่งแบ่งเมื่อกำหนดชนิดของสัญญาณ
import pandas as pd
try:
from StringIO import StringIO
except ImportError:
from io import StringIO
csvdata = """user_id,username
1,Alice
3,Bob
foobar,Caesar"""
sio = StringIO(csvdata)
pd.read_csv(sio, dtype={"user_id": int, "username": "string"})
ValueError: invalid literal for long() with base 10: 'foobar'
โดยทั่วไปแล้ว dtypes มักจะเป็นสิ่งที่มีค่ามากอ่านเพิ่มเติมเกี่ยวกับพวกมันได้ที่นี่:
http://docs.scipy.org/doc/numpy/reference/generated/numpy.dtype.html
ชนิดใดมีอยู่?
เรามีสิทธิ์เข้าถึงชนิด numpy: float, int, bool, timedelta64 [ns] และ datetime64 [ns] โปรดทราบว่าวันที่ / เวลาที่ระบุนั้นไม่ทราบเขตเวลา
นุ่นขยายชุด dtypes นี้ด้วยตัวของมันเอง:
'datetime64 [ns,]' ซึ่งเป็นเวลาที่ทราบโซนเวลา
'category' ซึ่งเป็น enum เป็นหลัก (สตริงที่แสดงด้วยปุ่มจำนวนเต็มเพื่อบันทึก
'period []' เพื่อไม่ให้สับสนกับ timedelta วัตถุเหล่านี้จะยึดกับช่วงเวลาที่ระบุ
'Sparse', 'Sparse [int]', 'Sparse [float]' ใช้สำหรับ sparse data หรือ 'Data ที่มีช่องโหว่จำนวนมาก' แทนที่จะบันทึก NaN หรือ None ใน dataframe โดยไม่ต้องเว้นวัตถุ .
'ช่วงเวลา' เป็นหัวข้อของตัวเอง แต่การใช้งานหลักสำหรับการจัดทำดัชนี ดูเพิ่มเติมที่นี่
'Int8', 'Int16', 'Int32', 'Int64', 'UInt8', 'UInt16', 'UInt32', 'UInt64' เป็นจำนวนเต็มเฉพาะของนุ่นที่เป็นโมฆะซึ่งแตกต่างจากตัวแปร numpy
'string' เป็นรูปแบบเฉพาะสำหรับการทำงานกับข้อมูลสตริงและให้การเข้าถึง.str
คุณลักษณะในซีรีส์
'บูลีน' เป็นเหมือน 'บูล' ที่ไม่สำคัญ แต่ก็ยังรองรับข้อมูลที่ขาดหายไป
อ่านการอ้างอิงที่สมบูรณ์ได้ที่นี่:
การอ้างอิง Pandas dtype
Gotchas, caveats บันทึกย่อ
การตั้งค่าdtype=object
จะเงียบคำเตือนข้างต้น แต่จะไม่ทำให้หน่วยความจำมีประสิทธิภาพมากขึ้นเพียง แต่ประมวลผลที่มีประสิทธิภาพหากมีสิ่งใด
การตั้งค่าdtype=unicode
จะไม่ทำอะไรตั้งแต่ numpy ที่จะแสดงเป็นunicode
object
การใช้งานตัวแปลง
ได้อย่างถูกต้อง @sparrow คะแนนจากการใช้งานของแปลงเพื่อหลีกเลี่ยงหมีแพนด้าเป่าขึ้นเมื่อพบในคอลัมน์ตามที่ระบุไว้'foobar'
int
ฉันต้องการเพิ่มว่าตัวแปลงนั้นหนักและไม่มีประสิทธิภาพในการใช้ในแพนด้าและควรใช้เป็นทางเลือกสุดท้าย นี่เป็นเพราะกระบวนการ read_csv เป็นกระบวนการเดียว
ไฟล์ CSV สามารถประมวลผลทีละบรรทัดและสามารถประมวลผลโดยตัวแปลงหลายตัวในแบบขนานได้อย่างมีประสิทธิภาพมากขึ้นเพียงแค่ตัดไฟล์ออกเป็นเซ็กเมนต์และเรียกใช้กระบวนการหลาย ๆ กระบวนการสิ่งที่แพนด้าไม่สนับสนุน แต่นี่เป็นเรื่องราวที่แตกต่าง