অবচয় করা নিম্ন_মেমরি বিকল্প
low_memory
বিকল্প সঠিকভাবে অবচিত করা হয় না, কিন্তু এটি হওয়া উচিত যেহেতু এটা আসলে ভিন্নভাবে কিছু না [ উৎস ]
আপনি এই low_memory
সতর্কতাটি পাওয়ার কারণটি হ'ল কারণ প্রতিটি কলামের জন্য টাইপগুলি অনুমান করা খুব মেমরির দাবি। পান্ডস প্রতিটি কলামে ডেটা বিশ্লেষণ করে কী টাইপ করবেন তা নির্ধারণ করার চেষ্টা করে।
Dtype অনুমান (খুব খারাপ)
পান্ডারা কেবলমাত্র একবার নির্ধারণ করতে পারে পুরো কপিটি একবার পড়ার পরে কোনও কলামটি কী টাইপ করবে। এর অর্থ হ'ল পুরো ফাইলটি পড়ার আগে কিছুই সত্যই পার্স করা যায় না যদি আপনি শেষ মানটি পড়েন তবে সেই কলামটির dtype পরিবর্তন করার ঝুঁকি না থাকলে।
এমন একটি ফাইলের উদাহরণ বিবেচনা করুন যার কলামে ইউজার_আইডি রয়েছে। এটিতে 10 মিলিয়ন সারি রয়েছে যেখানে ব্যবহারকারী_আইডি সর্বদা সংখ্যা থাকে। যেহেতু পান্ডারা জানতে পারবেন না এটি কেবল সংখ্যা, তাই এটি সম্ভবত পুরো ফাইলটি না পড়া পর্যন্ত এটি মূল স্ট্রিং হিসাবে রাখবে।
টাইপগুলি নির্দিষ্ট করে (সর্বদা করা উচিত)
যোগ
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'
টাইপগুলি সাধারণত একটি অদ্ভুত জিনিস, এগুলি সম্পর্কে এখানে আরও পড়ুন:
http://docs.scipy.org/doc/numpy/references/generated/numpy.dtype.html
কি টাইপ বিদ্যমান?
আমাদের কাছে ন্যালি টাইপগুলি অ্যাক্সেস রয়েছে: ফ্লোট, ইনট, বুল, টাইমডেলটা [৪ [এনএস] এবং ডেটটাইম 64৪ [এনএস]। নোট করুন যে তারিখ / সময় টাইপগুলি টাইম জোন সচেতন নয় Note
পান্ডারা নিজস্ব ধরণের এই সেটটি প্রসারিত করে:
'ডেটটাইম 64 [এনএস,]' যা একটি সময় অঞ্চল সচেতন টাইমস্ট্যাম্প।
'বিভাগ' যা মূলত একটি এনাম (সংরক্ষণের জন্য পূর্ণসংখ্য কী দ্বারা প্রতিনিধিত্ব করা স্ট্রিং)
'পিরিয়ড []' টাইমডেল্টায় বিভ্রান্ত হওয়ার দরকার নেই, এই বিষয়গুলি আসলে নির্দিষ্ট সময়সীমে নোঙ্গর করা হয়
'স্পারস', 'স্পার্স [ইনট]', 'স্পার্স [ফ্লোট]' স্পার ডেটা বা 'এমন ডেটা যার মধ্যে অনেকগুলি গর্ত রয়েছে' এর জন্য হয় 'এনএএন বা ডেটাফ্রেমে কোনও সংরক্ষণ করার পরিবর্তে এটি স্থান সাশ্রয় করে বস্তু বাদ দেয় ।
'ইন্টারভাল' এটি নিজস্ব একটি বিষয় তবে এর মূল ব্যবহারটি সূচকের জন্য। আরও এখানে দেখুন
'ইন্ট 8', 'ইন্ট 16', 'ইন্ট 32', 'ইন্ট 64', 'ইউআইএনটি 8', 'ইউআইএনট 16', 'ইউআইএনটি 32', 'ইউআইএনটি 64' সমস্ত পান্ডার নির্দিষ্ট ইন্টিজার যা ন্যালি ভেরিয়েন্টের থেকে পৃথক নয় ble
'স্ট্রিং' স্ট্রিং ডেটার সাথে কাজ করার জন্য একটি নির্দিষ্ট ধরণের এবং .str
এটি সিরিজের বৈশিষ্ট্যটিতে অ্যাক্সেস দেয় ।
'বুলিয়ান' নাম্বার 'বুল' এর মতো তবে এটি অনুপস্থিত ডেটা সমর্থন করে।
এখানে সম্পূর্ণ রেফারেন্স পড়ুন:
পান্ডস টাইপ রেফারেন্স
গটচস, ক্যাভেটস, নোটস
সেটিং dtype=object
উপরের সতর্কতাটি নিঃশব্দ করে দেবে, তবে এটিকে আরও মেমরি দক্ষ করে তুলবে না, কেবল কিছু হলে প্রক্রিয়া দক্ষ efficient
সেটিং dtype=unicode
কোনও কাজ করবে না, যেহেতু অকার্যকরভাবে, unicode
এটিকে প্রতিনিধিত্ব করা হয় object
।
রূপান্তরকারীদের ব্যবহার
@ স্প্যারো সঠিকভাবে 'foobar'
উল্লিখিত কলামে মুখোমুখি হওয়ার সময় পান্ডা বয়ে যাওয়া এড়াতে রূপান্তরকারীদের ব্যবহারকে সঠিকভাবে নির্দেশ করে int
। আমি যুক্ত করতে চাই যে রূপান্তরকারীরা পান্ডাসে ব্যবহার করার জন্য সত্যই ভারী এবং অদক্ষ এবং একটি সর্বশেষ উপায় হিসাবে ব্যবহার করা উচিত। এটি কারণ read_csv প্রক্রিয়া একটি একক প্রক্রিয়া।
সিএসভি ফাইলগুলি লাইন লাইন প্রক্রিয়াকরণ করা যায় এবং এভাবে সমান্তরালভাবে একাধিক রূপান্তরকারী দ্বারা আরও সহজেই ফাইলটিকে বিভাগগুলিতে কাটা এবং একাধিক প্রক্রিয়া চালিত করে প্রক্রিয়া করা যায়, যা পান্ডাস সমর্থন করে না। তবে এটি একটি ভিন্ন গল্প।