मुझे यह सीएसवी फ़ाइल https://www.kaggle.com/currie32/crimes- से मिली है। शिकागो में

मैं पंडों का उपयोग करके 2008-20011 सीएसवी को डेटाफ्रेम में पढ़ने के लिए गया था और मुझे एक पार्स एरर संदेश मिला जिसमें कहा गया था कि सीएसवी की एक निश्चित पंक्ति में 41 फ़ील्ड पाए गए हैं जहां यह 23 की अपेक्षा कर रहा था।

ParserError: डेटा टोकन करने में त्रुटि। सी त्रुटि: अपेक्षित २३ फ़ील्ड लाइन ११४९०९४ में, देखा ४१

मैंने इस आदेश का उपयोग किसी भी खराब पंक्तियों को छोड़कर सीएसवी को पढ़ने के लिए किया था:

CHIcrime_df2 = pd.read_csv(path, error_bad_lines=False)

यह योजना के अनुसार काम करता था, लेकिन मैं जानना चाहता था कि वे सभी अतिरिक्त क्षेत्र क्या थे इसलिए मैंने csv.reader के साथ फ़ाइल पढ़ी

with open('path') as data: reader=csv.reader(data) interestingrows=[row for idx, row in enumerate(reader) if idx==1149094]

मुझे उम्मीद थी कि 41 फ़ील्ड होंगे, लेकिन 23 थे। मैं यह भी सुनिश्चित करना चाहता था कि मैं इंडेक्स को भ्रमित नहीं कर रहा था, इसलिए मैंने कुछ पहले और बाद में मुद्रित किया; उनमें से प्रत्येक के पास समान संख्या में फ़ील्ड थे। क्या कोई मुझे यह समझने में मदद कर सकता है कि इसके साथ क्या हो रहा है?

0
Mastacow 31 जुलाई 2019, 20:07

2 जवाब

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

डेविड माकोवोज़ ने इस मुद्दे को पहले ही स्पष्ट कर दिया है, इसलिए मैं केवल आपके प्रश्न का उत्तर दूंगा:

पांडा के साथ सीएसवी से एकल पंक्ति को कैसे देखें?

यदि त्रुटि n (११४९०९४) पंक्ति में हुई है, तो आप n-१ पंक्तियों को छोड़ दें और केवल १ पंक्ति पढ़ें:

df = pd.read_csv('Chicago_Crimes_2008_to_2011.csv', skiprows=1149093, nrows=1, header=None)

नतीजा:

>>> print(df.values)
[[2023517 7818233 'HS626859' '11/21/2010 11:00:00 PM'
  '079XX S JEFFERY BLVD' 460 'BATTERY' 'SIMPLE' 'STREET' False False 414
  4.0 8.0 46.0 '08B' 1190912.0 1852820.0 2010 '02/04/2016 06:33:39 AM'
  41.751151039 '-87.1:00:00 AM' '031XX W LEXINGTON ST' 810 'THEFT'
  'OVER $500' 'STREET' False False 1134 11.0 24.0 27.0 6 nan nan 2008
  '08/17/2015 03:03:40 PM' nan nan nan]]
0
Stef 1 अगस्त 2019, 17:15

मैं मानता हूं कि यह भ्रमित करने वाला है। क्या हो रहा है यह जानने के लिए मुझे पांडा का उपयोग किए बिना फ़ाइल को पढ़ना पड़ा:

import zipfile
import pandas as pd
archive = zipfile.ZipFile(fname, 'r')
csvfile = archive.open('Chicago_Crimes_2008_to_2011.csv', 'r')
bdata = csvfile .readlines()
data = [line.decode() for line in bdata]
data_df = pd.DataFrame.from_records(data[1:]) #the first line is the header

अब तक सब ठीक है।

data_df.shape
>>(2688711, 41)

ठीक है, 41 कॉलम वाली एक पंक्ति है

data_df.dropna()
>>1149092   2023517 7818233 HS626859    11/21/2010 11:00:00 PM  079XX S JEFFERY BLVD ...

तो यह पंक्ति # ११४९०९३ हैडर की गिनती नहीं है और ११४९०९४ हेडर की गिनती है।

print (data[1149093])
>>['2023517', '7818233', 'HS626859', '11/21/2010 11:00:00 PM', '079XX S JEFFERY BLVD', '0460', 'BATTERY', 'SIMPLE', 'STREET', 'False', 'False', '414', '4.0', '8.0', '46.0', '08B', '1190912.0', '1852820.0', '2010', '02/04/2016 06:33:39 AM', '41.751151039', '-87.1:00:00 AM', '031XX W LEXINGTON ST', '0810', 'THEFT', 'OVER $500', 'STREET', 'False', 'False', '1134', '11.0', '24.0', '27.0', '06', '', '', '2008', '08/17/2015 03:03:40 PM', '', '', '']

तो, यह दो पंक्तियों की तरह दिखता है जहां कुछ ओवरलैप के साथ एक में लिखा जाता है। लेकिन, लब्बोलुआब यह है कि, आप उस पंक्ति को अनदेखा करके सही काम कर रहे हैं CHIcrime_df2 = pd.read_csv(path, error_bad_lines=False)

0
David Makovoz 31 जुलाई 2019, 23:06