मैं एक .csv फ़ाइल से पार्स करने की कोशिश कर रहा हूँ:

planets = pd.read_csv("planets.csv", sep=',')

लेकिन मैं हमेशा इस त्रुटि के साथ समाप्त होता हूं:

ParserError: Error tokenizing data. C error: Expected 1 fields in line 13, saw 9

मेरी csv फ़ाइल की पहली कुछ पंक्तियाँ इस तरह दिखती हैं:

# This file was produced by the test
# Tue Apr  3 06:03:27 2018
#
# COLUMN pl_hostname:    Host Name
# COLUMN pl_discmethod:  Discovery Method
# COLUMN pl_pnum:        Number of Planets in System
# COLUMN pl_orbper:      Orbital Period [days]
# COLUMN pl_orbsmax:     Orbit Semi-Major Axis [AU])
# COLUMN st_dist:        Distance [pc]
# COLUMN st_teff:        Effective Temperature [K]
# COLUMN st_mass:        Stellar Mass [Solar mass] 
#
loc_rowid,pl_hostname,pl_discmethod,pl_pnum,pl_orbper,pl_orbsmax,st_dist,st_teff,st_mass
1,11 Com,Radial Velocity,1,326.03000000,1.290000,110.62,4742.00,2.70
2,11 UMi,Radial Velocity,1,516.22000000,1.540000,119.47,4340.00,1.80
3,14 And,Radial Velocity,1,185.84000000,0.830000,76.39,4813.00,2.20
4,14 Her,Radial Velocity,1,1773.40000000,2.770000,18.15,5311.00,0.90
5,16 Cyg B,Radial Velocity,1,798.50000000,1.681000,21.41,5674.00,0.99
6,18 Del,Radial Velocity,1,993.30000000,2.600000,73.10,4979.00,2.30
7,1RXS J160929.1-210524,Imaging,1,,330.000000,145.00,4060.00,0.85

संपादित करें: यह पंक्ति १३ है:

loc_rowid,pl_hostname,pl_discmethod,pl_pnum,pl_orbper,pl_orbsmax,st_dist,st_teff,st_mass

संपादित करें: @Rakesh को धन्यवाद, पहली १२ पंक्तियों को छोड़ देने से समस्या हल हो गई

ग्रह = pd.read_csv("planets.csv", sep=',', स्किपरो=12)

0
Baalateja Kataru 3 अप्रैल 2018, 17:30

4 जवाब

सबसे बढ़िया उत्तर

फ़ंक्शन pandas.read_csv() को नंबर मिलता है पहली पंक्ति से कॉलम और उनके नाम। डिफ़ॉल्ट रूप से यह पहली पंक्तियों के टिप्पणी होने के विकल्प पर विचार नहीं करता है।

क्या हो रहा है कि पांडा पहली पंक्ति को पढ़ता है, इसे विभाजित करता है और पाता है कि केवल एक कॉलम है, इस विभाजन को लाइन 13 में करने के लिए जो कि पहली टिप्पणी नहीं की गई पंक्ति है। इसे हल करने के लिए, तर्क comment का उपयोग किया जा सकता है।

planets = pd.read_csv("planets.csv", comment='#')

skiprows का उपयोग करने की तुलना में, यह समान कोड को planets.csv फ़ाइल लोड करने की अनुमति देता है, भले ही टिप्पणी पंक्तियों की संख्या भिन्न हो।

3
OriolAbril 3 अप्रैल 2018, 14:49

मैंने आपके द्वारा प्रदान किए गए सीएसवी डेटा का उपयोग करके निम्नलिखित कोड चलाया और यह बिना किसी समस्या के चला। मैं निम्नलिखित नीचे चला गया:

import pandas as pd planets = pd.read_csv("planets.csv", sep=',') print(planets)

कहा जा रहा है कि, कुछ मुद्दे हो सकते हैं।

सबसे पहले, आप डिलीमीटर को sep=None को सूंघने के लिए सेट कर सकते हैं ताकि पांडा यह पता लगा सकें कि सीमांकक क्या है। आप headers=None भी सेट कर सकते हैं तो यह इस तरह दिखेगा:

pd.read_csv("planets.csv", sep=None, headers=None)

एक एन्कोडिंग समस्या हो सकती है। यह देखने के लिए कि क्या त्रुटि मौजूद है, आप इनमें से कुछ मानों में एन्कोडिंग सेट करने का प्रयास कर सकते हैं https://docs.python.org/3/library/codecs.html#standard-encodings

0
bruckerrlb 3 अप्रैल 2018, 14:49

उपरोक्त उत्तर के अलावा, यदि आपको केवल 13वीं पंक्ति में समस्या है, तो आप इसे छोड़ सकते हैं।

pd.read_csv("plants.csv", skiprows = 12, header=None)
0
Harry_pb 3 अप्रैल 2018, 14:43

मुझे यह काम करने के लिए मिला है जब मैं त्रुटि के सटीक कारण का पता नहीं लगा सका:

planets = pd.read_csv('planets.csv', sep=',', error_bad_lines=False)
0
Bill Armstrong 3 अप्रैल 2018, 14:36