Pandas: طلب DataFrame.to_tsv () لقراءة نص محدد بعلامات جدولة

تم إنشاؤها على ١١ يونيو ٢٠١٥  ·  16تعليقات  ·  مصدر: pandas-dev/pandas

أقترح وظيفة ، يمكن استدعاؤها على DataFrame ، تسمى to_tsv أو to_table. الدالة تعادل to_csv() مع الوسيطة sep='\t' . بينما يحتوي to_tsv() على وظيفة كتابة ملفات tsv ، أجد أنه من المزعج أن تضطر دائمًا إلى تحديد وسيطة إضافية. أنا أفضل ملفات tsv على ملفات csv لأن علامات التبويب نادرًا ما تحدث وبالتالي تقلل من الحاجة إلى الهروب. أجد أيضًا جعل النص العادي أكثر قابلية للقراءة. أشعر بالقلق من أن عدم وجود وظيفة مخصصة to_tsv() يشجع على استخدام csv عبر tsv. حاليًا read_table() افتراضيًا لفواصل علامات التبويب ، لكن لا توجد وظيفة مكافئة للكتابة.

IO CSV

التعليق الأكثر فائدة

+1. بصفتي ممارسًا ، سأكون ممتنًا للغاية للسكر to_tab .

ال 16 كومينتر

بالإضافة إلى كونها to_csv(sep='\t') فقط ، يجب أن تفكر وظيفة to_tsv في تغيير عرض الأسعار الافتراضي ، نظرًا لأن الاقتباس أقل أهمية لملفات tsv.

واجهة برمجة تطبيقات الباندا مليئة بالفعل بالكثير من أساليب الراحة التي نادرًا ما تستخدم. لا أعتقد حقًا أن إضافة عنصر آخر فكرة جيدة.

أتفق مع @ shoyer هنا. جميع الوظائف موجودة للقيام بذلك في حدود to_csv ، ونظرًا لأن لدينا بالفعل العديد من الطرق ، أعتقد أن سبب إضافة طريقة جديدة يجب أن يكون أقوى من القدرة على توفير الإعدادات الافتراضية الأخرى.

أقوم بإغلاق هذا (لدينا الكثير من القضايا المفتوحة ..) ، لكن المناقشة يمكن أن تستمر بالتأكيد إذا لزم الأمر.

+1. بصفتي ممارسًا ، سأكون ممتنًا للغاية للسكر to_tab .

أعتقد أن سبب إضافة سبب جديد يجب أن يكون أقوى من القدرة على توفير إعدادات افتراضية أخرى.

تعد ملاءمة IMO مبررًا جيدًا (يميل الأشخاص إلى كتابة العديد من الملفات النصية ، لذلك يجب استكمال to_csv بالمعلمات باستمرار).

ومع ذلك ، فإن حافزي الرئيسي هو ازدراء تنسيق CSV. يؤلمني أن أرى الأشخاص ما زالوا يستخدمون CSV على TSV. من الواضح أن دعم قاعدة البيانات / Excel له دور يلعبه. لكن مشروعًا مثل الباندا يجب أن يسعى جاهداً لجعل أفضل الممارسات أسهل في التنفيذ.

على الرغم من أن هذه ليست مشكلة رئيسية بالنسبة لي حاليًا ، فإن csv هو تمثيل الولايات المتحدة / الكومنولث وهو غير مدرك دوليًا. مع كل فلسفة Pythonic لقبول UTF والتدويل ، يجب تفضيل فصل الجدولة على csv / semicolon-sv.

بينما يمكنني فهم المشاعر التي طرحها shoyer ، أتفق معdhimmel. من واقع خبرتي أن TSV هو تنسيق قياسي لتحليل البيانات أكثر من تنسيق CSV. هناك العديد من حالات الاستخدام التي يكون فيها تنسيق TSV مطلبًا ، في حين أنني لست على دراية بأي تنسيق CSV (هناك بعض الأمثلة على الاستخدامات الشائعة هنا ). يتمتع TSV أيضًا بميزة تتمثل في سهولة قراءة النص الخام ، ويتجنب المشكلات المتعلقة بالاقتباس كما هو مذكور بواسطة dhimmel.

أنا فقط أعارض بشكل طفيف إضافة to_tsv . في تجربتي (في الولايات المتحدة) ، يعد CSV أكثر شيوعًا من TSV (على الأقل باسم تنسيق الملف) ، ولكن بشكل طفيف فقط. الميزة الرئيسية التي يستخدمها to_tsv هي أن الاسم يجعله واضحًا على الفور ما يفعله.

كلا من CSV و TSV مدعومان جيدًا ويستخدمان على نطاق واسع في علم البيانات. يعد CSV تنسيقًا قديمًا ، وبالتالي فإن العديد من المشاريع التي تركز على الخلف يتم تعيينها بشكل افتراضي إلى CSV. ومع ذلك ، أعتقد أن المشروعات التي تركز على إعادة التوجيه يجب أن تكون افتراضية إلى TSV ، لأنها أفضل لعلوم البيانات. نظرًا لعدم وجود دالة إخراج افتراضية to_text_delimited_file في الباندا ، فإن to_csv هو الافتراضي الفعلي. نظرًا لأن معظم المستخدمين لا يهتمون بما يكفي لتحديد sep='\t' يدويًا ، فإن الباندا تساهم في انتشار ملفات CSV على TSVs وتأخير ظهور التنسيق الأعلى.

يرجى إعفاء جهلي من هذه المسألة ولكن بصرف النظر عن كونها أسهل للقراءة كإنسان ، إذا وفقط إذا كانت رؤوس الأعمدة تحتوي على نفس الأحرف تقريبًا مثل البيانات المقابلة لها وهو ما لا يحدث دائمًا ، ما هي المزايا التي يوفرها TSV على CSV؟ أشعر بالفضول بصراحة إذا كان هناك اختلاف في الأداء بين الاثنين ، فأنا أستخدم TSV في الوقت الحالي ولكن بصراحة فقط لأن ملفات البيانات التي أعمل معها جاءت بهذا التنسيق ، لذا تركتها بنفس التنسيق.

ما هي المزايا التي يوفرها TSV على CSV؟

علامات التبويب @ Starkiller4011 هي فاصل طبيعي أكثر للبيانات العمودية. إنها تتطلب اقتباسًا أقل ، نظرًا لأن القيم نادرًا ما تحتوي على علامات تبويب ولكنها تحتوي غالبًا على فاصلات.

أشعر بالفضول بصراحة إذا كان هناك اختلاف في الأداء بين الاثنين

أتوقع أن يكون الاختلاف في الأداء تافهًا. ومع ذلك ، مثل معظم الأشياء في علم البيانات ، فإن النوع الحقيقي للأداء المهم هو كفاءة المبرمج. وأعتقد أن TSVs أفضل في التعامل معها من ملفات CSV.

لا يتفق الجميع على أن فصل علامات التبويب أفضل من csv - لا أفعل ، على سبيل المثال.

بصفتنا مبرمجين في Python ، نعلم أن المسافات البيضاء لا يتم الاحتفاظ بها دائمًا عبر عمليات مختلفة ، مثل النسخ واللصق. أولئك منا الذين يجيبون على الكثير من الأسئلة حول SO ، على سبيل المثال ، يضطرون بانتظام إلى استخدام sep="\s\s+" لتحليل النص الذي ألقاه الأشخاص بتنسيق مفصول بمسافات بيضاء ، وعلينا أن نأمل أن يكونوا قد وضعوا مسافات كافية بين الأعمدة لهذا العمل. إذا كانوا يستخدمون الفواصل ، أو الفاصلة المنقوطة ، أو الخطوط ، أو شيء من هذا القبيل ، فلن تكون هذه مشكلة. (وفكرت للتو في قيراط ، الذي كان يستخدم على نطاق واسع في بعض المجالات.)

إذا أردنا إضافة اسم مستعار to_tsv لجعل بعض الناس أكثر سعادة ، حسنًا. لكن دعونا لا نتظاهر بأن TSV ليس لديه مشاكل خاصة به عندما تعمل معه ، والميزة الوحيدة التي يمكنني التفكير فيها هي تقليل الاقتباس.

أعتقد أن الأمر يستحق التراجع والاعتراف بأن دالة مثل to_csv هي نوع من السخافة ، يجب أن يكون الحل أكثر عمومية to_table وظيفة تتطلب محددًا ليتم تحديدها ، وأيها to_csv مجرد غلاف ملائم. R لديها هذه الوظيفة في وظيفة write.table() ، والتي تكون أكثر منطقية.

للتسجيل ، أعتقد أن كلا من CSV و TSV وتنسيقات مقبولة وجيدة. كلاهما يجب أن يتم دعمهما. يُظهر @ dsm054 بعض المزايا الجذابة لمحددات المسافات التي لا تحتوي على مسافات بيضاء.

المشكلة الأكبر في رأيي هي استخدام الامتداد .csv بشكل عشوائي (على سبيل المثال عند الإشارة إلى TSVs). انظر المناقشة على https://github.com/pandas-dev/pandas/pull/14587. أتفق مع stevekm على أن to_table يجب أن يكون دالة عامة حيث يجب عليك تحديد المحدد الخاص بك ، بينما يجب أن يركز to_csv أو to_tsv على تلك المعايير. قد يستغرق إجراء هذا بطريقة متوافقة مع الإصدارات السابقة بعض التفكير. ولكن على الأقل يجب أن تأخذ pandas 2 في الاعتبار أسماء الوظائف على غرار readr .

بدأت للتو في استخدام إطارات بيانات الباندا القادمة من R + tidyverse / readr وأول شيء أعجبني سلبًا هو عدم وجود طرق قراءة / كتابة متسقة مثل:

read_csv () / write_csv (): ملفات مفصولة بفواصل (CSV)
read_tsv () / write_tsv (): ملفات مفصولة بعلامة التبويب
read_delim () / write_delim (): ملفات محددة عامة
read_fwf () / write_fwf (): ملفات ذات عرض ثابت
read_table () / write_table (): ملفات مجدولة حيث يتم فصل الأعمدة بمسافة بيضاء.
read_log () / write_log (): ملفات سجل الويب

خلال 20 عامًا من عملي في علم البيانات في علم الجينوم ، لم أواجه ملف csv مطلقًا ، توجد معظم البيانات بتنسيق tsv (أو محدد بمسافة بيضاء). إن الاضطرار إلى تحديد sep والاقتباس باستخدام df.to_csv () لكتابة ملف tsv (أو محدد بمسافة بيضاء) أمر غير مريح على أقل تقدير.

سيكون وجود df.read_tsv () df.to_tsv () للملفات المحددة بعلامات جدولة و df.read_table () df.to_table () للملفات المحددة بمسافات بيضاء مفيدًا جدًا للأشخاص القادمين إلى الباندا من R.

اعتبارًا من pandas 0.24 ، تم إهمال read_table (راجع https://github.com/pandas-dev/pandas/issues/21948 / https://github.com/pandas-dev/pandas/pull/ 21954). منذ أن كنت أستخدم read_table كبديل لنقص read_tsv ، أحصل الآن على الكثير:

FutureWarning: read_table is deprecated, use read_csv instead, passing sep='\t'.

على الجانب الإيجابي ، فإن إزالة read_table تجعل الأمر أكثر وضوحًا لإضافة كل من الدالتين read_tsv و to_tsv ، على الرغم من أن المد يتحول ضد وظائف الراحة وفقًا لـ https: // github .com / pandas-dev / pandas / قضايا / 18262؟

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات