পাইথন পান্ডাস ডেটা টোকানাইজ করার সময় ত্রুটি


343

আমি .csv ফাইলের ব্যবহারের জন্য পান্ডাস ব্যবহার করার চেষ্টা করছি তবে আমি এই ত্রুটিটি পেয়েছি:

pandas.parser.CParserError: ডেটা টোকানাইজ করার সময় ত্রুটি। সি ত্রুটি: 3 লাইনের 2 ক্ষেত্রের প্রত্যাশিত, 12 টি দেখেছি

আমি পান্ডাস ডক্স পড়ার চেষ্টা করেছি, কিন্তু কিছুই পাইনি।

আমার কোডটি সহজ:

path = 'GOOG Key Ratios.csv'
#print(open(path).read())
data = pd.read_csv(path)

আমি কীভাবে এটি সমাধান করতে পারি? আমি কি csvমডিউল বা অন্য কোন ভাষা ব্যবহার করব ?

ফাইলটি মর্নিংস্টারের


10
যদি কোনও লিখিত ফাইল পড়ার সময় এই ত্রুটিটি দেখা দেয় তবে pandas.to_csv()এটি হতে পারে কারণ একটি কলামের নামগুলিতে একটি '\ r' রয়েছে, সেই ক্ষেত্রে to_csv () আসলে পরবর্তী ফ্রেঞ্চের পরবর্তী কলামের নামগুলি ডেটা ফ্রেমের প্রথম কলামে লিখবে, যার ফলে প্রথম এক্স সারিতে কলামগুলির সংখ্যার মধ্যে পার্থক্য। এই তফাতটি সি ত্রুটির একটি কারণ।
ব্যবহারকার 0

9
কিছু সময় কেবল স্পষ্টভাবে "সেপ" পরামিতি দেওয়ার সাহায্য করে। পার্সার সমস্যা বলে মনে হচ্ছে।
গিলগমাস

2
আপনি যখন একটি বিস্ময়কর হিসাবে কমা ব্যবহার করছেন এবং আপনার আরও কমা রয়েছে তখন এই ত্রুটিটি দেখা দিতে পারে (ত্রুটি সারিতে আরও ক্ষেত্রগুলি পরে শিরোনামে সংজ্ঞায়িত করা হয়)। সুতরাং আপনাকে অতিরিক্ত ক্ষেত্রটি সরিয়ে ফেলতে হবে বা ভুল করে সেখানে অতিরিক্ত কমা সরিয়ে ফেলতে হবে। আপনি এটি ম্যানুয়ালি ঠিক করতে পারেন এবং তারপরে আপনাকে ত্রুটি লাইনগুলি এড়িয়ে যাওয়ার দরকার নেই।
tsveti_iko

2
গিলগমাসের মন্তব্য আমাকে সাহায্য করেছে। টেক্সট এডিটরে সিএসভি ফাইল খুলুন (উইন্ডোজ এডিটর বা নোটপ্যাড ++ এর মত) যাতে পৃথক হওয়ার জন্য কোন অক্ষর ব্যবহৃত হয় তা দেখুন। এটি যদি একটি সেমিকোলন উদাহরণস্বরূপ চেষ্টা করুন pd.read_csv("<path>", sep=";")। এক্সেলটি চেক করার জন্য ব্যবহার করবেন না কারণ এটি কখনও কখনও ডেটা ডিফল্টরূপে কলামগুলিতে রাখে এবং তাই বিভাজককে সরিয়ে দেয়।
জুলিয়ান

@ গিলগামাসের মন্তব্য সম্পর্কে - এটি আমাকে সঠিক দিকে পাঠিয়েছে, তবে আমার ক্ষেত্রে এটি সুস্পষ্টভাবে সমাধান না করে সমাধান করা হয়েছিল "সেপ" পরামিতিটি ।
TheLoneDeranger

উত্তর:


515

আপনি চেষ্টাও করতে পারেন;

data = pd.read_csv('file1.csv', error_bad_lines=False)

মনে রাখবেন যে এর ফলে আপত্তিকর লাইনগুলি এড়ানো যাবে।


152
মনে রাখবেন যে ত্রুটি_ব্যাড_লাইনস = মিথ্যা ব্যবহারের কারণে আপত্তিকর লাইনগুলি এড়ানো যাবে।
biobirdman

10
এই উত্তরে হোঁচট খেয়েছে, লাইনে থাকা অনুপস্থিত কলামগুলি ভরাট করার কোনও উপায় কি এরকম কিছু তৈরি করে expected 8 fields, saw 9?
পেট্রা বারাস

26
আপত্তিজনক ফাইলটি তদন্ত করা এবং খারাপ লাইনগুলি সংশোধন করা এর থেকে ভাল সমাধান হ'ল যাতে সেগুলি পড়তে পারে read_csv। @ পেট্রাবারস, কেন কেবল সেগুলি হারিয়ে যাওয়া সিএসভি ফাইলগুলিতে কলামগুলি যুক্ত করবেন না (প্রয়োজন অনুসারে নাল মান সহ)?
dbliss

4
হ্যাঁ, আমি সবেমাত্র তা করেছি। কলামগুলি যুক্ত করে এটি অনেক সহজ। একটি স্প্রেডশীটে CSV খোলার এটি করে।
পেট্রা বারাস

5
names=["col1", "col2", ...]প্রত্যাশিত কলামগুলির সর্বাধিক সংখ্যার জন্য পাস করাও কাজ করে এবং আমি যখন এই সমস্যাটি জুড়ে এসেছি তখনই এইভাবে সমাধান করেছি। দেখুন: স্ট্যাকওভারফ্লো.com
স্টিভেন রাউক

100

এটি একটি সমস্যা হতে পারে

  • আপনার ডেটা সীমানা
  • @ টমআগস্পারগার হিসাবে উল্লেখ করা হয়েছে প্রথম সারিতে

এটা সমাধানের জন্য, নির্দিষ্ট করার চেষ্টা করুন sepএবং / অথবা headerযখন কলিং আর্গুমেন্ট read_csv। এই ক্ষেত্রে,

df = pandas.read_csv(fileName, sep='delimiter', header=None)

উপরের কোডে, sepআপনার সীমানা সংজ্ঞায়িত করে এবং header=Noneপান্ডাসকে বলে যে আপনার উত্স ডেটাতে শিরোনাম / কলাম শিরোনামগুলির জন্য কোনও সারি নেই। এইভাবে ডক্স বলছে : "যদি ফাইলটিতে শিরোনামের সারি না থাকে তবে আপনার স্পষ্টতই শিরোনাম = কোনওটিই পাস করা উচিত নয়"। এই উদাহরণে, পান্ডাস প্রতিটি ক্ষেত্রের জন্য স্বয়ংক্রিয়ভাবে পুরো সংখ্যা সূচকগুলি তৈরি করে {0,1,2, ...}}

ডক্স অনুসারে, ডিলিমিটার জিনিসটি কোনও সমস্যা হওয়া উচিত নয় । দস্তাবেজগুলি বলে যে "যদি সেপটি কোনওটিই না [নির্দিষ্ট না করে] থাকে তবে স্বয়ংক্রিয়ভাবে এটি নির্ধারণ করার চেষ্টা করবে।" সুস্পষ্ট ডিলিমিটারগুলির উদাহরণ সহ আমি এর সাথে ভাল ভাগ্য পাইনি।


হ্যাঁ, কখনও কখনও ডিলিমিটার এই সমস্যার কারণ হতে পারে। আমি একই সমস্যার মুখোমুখি হয়েছিলাম যেখানে ডিলিমিটারটি একটি সেমিকোলন ছিল (;)
অনুরাগ শর্মা

43

পার্সারটি ফাইলের শিরোনামের দ্বারা বিভ্রান্ত হচ্ছে। এটি প্রথম সারিটি পড়ে এবং সেই সারি থেকে কলামগুলির সংখ্যা নির্ধারণ করে। তবে প্রথম দুটি সারি ফাইলের প্রকৃত ডেটার প্রতিনিধি নয়।

এটি দিয়ে চেষ্টা করুন data = pd.read_csv(path, skiprows=2)


30

আপনার সিএসভি ফাইলে ভেরিয়েবলের কলামের সংখ্যা থাকতে পারে এবং read_csv প্রথম কয়েকটি সারি থেকে । এক্ষেত্রে এটি সমাধানের দুটি উপায়:

1) সর্বাধিক সংখ্যক কলাম সহ ডামি প্রথম লাইন রাখতে CSV ফাইলটি পরিবর্তন করুন (এবং নির্দিষ্ট করুন header=[0] )

2) বা names = list(range(0,N))যেখানে N কলামগুলির সর্বাধিক সংখ্যা।


24

এটি অবশ্যই ডিলিমিটারের সমস্যা, কারণ বেশিরভাগ সিএসভি সিএসভি ব্যবহার করে তৈরি হয়েছে sep='/t'তাই বিভাজক read_csvব্যবহার করে ট্যাব অক্ষরটি (\t)ব্যবহার করার চেষ্টা করুন /t। সুতরাং, নিম্নলিখিত কোড লাইন ব্যবহার করে খোলার চেষ্টা করুন।

data=pd.read_csv("File_path", sep='\t')

5
@ মিশেলকিউ: এটি ভুল। একটি সিএসভি, যদিও কমা দ্বারা সাধারণত সীমানা নির্ধারণ করা হয়, অন্যান্য অক্ষর দ্বারাও সীমিত করা যেতে পারে। সিএসভি স্পেসিফিকেশন দেখুন । এটি কমা, একটি ট্যাব ('\ t'), সেমিকোলন এবং সম্ভবত অতিরিক্ত স্থান হতে পারে। :)
ডিজেগ্র্যান্ডপাজে

আমার ক্ষেত্রে এটি একটি বিভাজক সমস্যা ছিল। read_csv স্পষ্টতই কমাতে ডিফল্ট হয়েছে এবং আমার কাছে পাঠ্য ক্ষেত্র রয়েছে যাতে কমা রয়েছে (এবং ডেটা কোনওভাবেই আলাদা বিভাজকের সাথে সংরক্ষণ করা হয়েছিল)
ইউজার 108569

যদি মানগুলিতে কমা ব্যবহার করা হয় তবে ট্যাব হ'ল ডিলিমিটার এবং সেপ ব্যবহার করা হয় না (বা মান হিসাবে চিহ্নিত করা হয় বলে মনে করা হয় যা ডিলিমিটরের উপরে প্রস্তাবিত) তবে এই ত্রুটি দেখা দেবে। নিশ্চিত করুন যে ডিলিমিটারটি কোনও মানেই না ঘটে অন্যথায় কিছু সারিতে ভুল সংখ্যক কলামের উপস্থিতি উপস্থিত হবে তা নিশ্চিত করুন
ডেমোঙ্গোলেম

আমি সিএসভি তৈরি করার সময় এক্সেল 2016 ব্যবহার করছি এবং সেপ = '; আমার জন্য কাজ
আবদুল্লাহ

18

আমারও এই সমস্যাটি ছিল তবে সম্ভবত অন্য কোনও কারণে। আমার সিএসভিতে আমার কিছু পিছনে কমা ছিল যা একটি অতিরিক্ত কলাম যুক্ত করছিল যা পান্ডস পড়ার চেষ্টা করছে। নিম্নলিখিত কাজগুলি ব্যবহার করে তবে এটি কেবল খারাপ রেখাগুলি উপেক্ষা করে:

data = pd.read_csv('file1.csv', error_bad_lines=False)

আপনি যদি ত্রুটিগুলি পরিচালনা করার জন্য লাইনগুলি কুৎসিত ধরণের হ্যাক রাখতে চান তবে নীচের মতো কিছু করতে হবে:

line     = []
expected = []
saw      = []     
cont     = True 

while cont == True:     
    try:
        data = pd.read_csv('file1.csv',skiprows=line)
        cont = False
    except Exception as e:    
        errortype = e.message.split('.')[0].strip()                                
        if errortype == 'Error tokenizing data':                        
           cerror      = e.message.split(':')[1].strip().replace(',','')
           nums        = [n for n in cerror.split(' ') if str.isdigit(n)]
           expected.append(int(nums[0]))
           saw.append(int(nums[2]))
           line.append(int(nums[1])-1)
         else:
           cerror      = 'Unknown'
           print 'Unknown Error - 222'

if line != []:
    # Handle the errors however you want

উপরের কোডে ভেরিয়েবল 'লাইন' দ্বারা খারাপ লাইন দেওয়া হবে বলে আমি ডেটাফ্রেমে রেখাগুলি পুনরায় সন্নিবেশ করানোর জন্য একটি স্ক্রিপ্ট লিখতে এগিয়ে গিয়েছি। কেবলমাত্র সিএসভি রিডার ব্যবহার করে এগুলি এড়ানো যায়। আশা করি পান্ডাস বিকাশকারীরা ভবিষ্যতে এই পরিস্থিতি মোকাবেলা করা সহজতর করতে পারে।


14

আমার এই সমস্যা ছিল, যেখানে আমি কলামের নামগুলি না দিয়ে সিএসভিতে পড়ার চেষ্টা করছিলাম।

df = pd.read_csv(filename, header=None)

আমি কলামের নামগুলি আগেই একটি তালিকায় নির্দিষ্ট করে দিয়েছিলাম এবং তারপরে এগুলিতে প্রেরণ করি namesএবং এটি এটি অবিলম্বে সমাধান করে। যদি আপনার কলামের নামগুলি সেট না করা থাকে তবে আপনি সর্বাধিক সংখ্যক স্থানধারকের নাম আপনার ডেটাতে থাকা সর্বাধিক কলামের সংখ্যা তৈরি করতে পারেন।

col_names = ["col1", "col2", "col3", ...]
df = pd.read_csv(filename, names=col_names)

1
এই উত্তরটি আরও ভাল কারণ ত্রুটি_ব্যাড_লাইন = মিথ্যা ব্যবহার করে তুলনায় সারিটি মোছা হয় না। অতিরিক্তভাবে, আপনি সহজেই নির্ধারণ করতে পারেন যে কোনও সময় এই সমাধান থেকে ডেটা ফ্রেম তৈরি করার সময় কোন সমস্যাগুলি লাইন ছিল।
zipline86

আমি @ জিপলাইন 86 এর সাথে একমত এই উত্তরটি নিরাপদ এবং বুদ্ধিমান।
মনিকা হেডনেক

11

আমি নিজে কয়েকবার এই সমস্যাটি করেছি। প্রায় প্রতিবারই কারণটি হ'ল যে ফাইলটি আমি খোলার চেষ্টা করছিলাম সেটি শুরু করা কোনও সঠিকভাবে সংরক্ষিত সিএসভি ছিল না। এবং "যথাযথ" দ্বারা, আমার অর্থ প্রতিটি সারিতে একই সংখ্যক বিভাজক বা কলাম ছিল।

সাধারণত এটি ঘটেছিল কারণ আমি এক্সেলে সিএসভি খুলেছিলাম এবং পরে এটি ভুলভাবে সংরক্ষণ করেছি। ফাইল এক্সটেনশানটি এখনও .csv থাকা সত্ত্বেও খাঁটি সিএসভি ফর্ম্যাটটি পরিবর্তন করা হয়েছিল।

পান্ডাস টু_সিএসভিতে সংরক্ষিত যে কোনও ফাইল সঠিকভাবে ফর্ম্যাট হবে এবং সেই সমস্যাটি হওয়া উচিত নয়। তবে আপনি যদি এটি অন্য কোনও প্রোগ্রাম দিয়ে খোলেন তবে এটি কাঠামো পরিবর্তন করতে পারে।

আশা করি এইটি কাজ করবে.


8

আমি একই ইস্যু জুড়ে এসেছি। pd.read_table()একই উত্স ফাইলটি ব্যবহার করা দেখে মনে হচ্ছে কাজ হবে। আমি এর কারণটি সনাক্ত করতে পারিনি তবে এটি আমার ক্ষেত্রে কার্যকর ar সম্ভবত আরও জ্ঞানী কেউ এটি কেন কাজ করেছে সে সম্পর্কে আরও আলোকপাত করতে পারে।

সম্পাদনা: আমি দেখতে পেয়েছি যে যখন আপনার ফাইলে এমন কিছু পাঠ্য রয়েছে যা আসল ডেটার মতো একই ফর্ম্যাট না করে তখন এই ত্রুটিটি উঠে যায়। এটি সাধারণত শিরোনাম বা পাদলেখ সম্পর্কিত তথ্য (এক লাইনের চেয়ে বেশি, সুতরাং এড়িয়ে যান_হাইডারটি কাজ করে না) যা আপনার আসল ডেটা (রিড_সিএসভি ব্যবহার করার সময়) হিসাবে একই সংখ্যক কমা দ্বারা আলাদা করা হবে না। পঠন-টেবিল ব্যবহার করে ডিলিমিটার হিসাবে একটি ট্যাব ব্যবহার করা হয় যা ব্যবহারকারীদের বর্তমান ত্রুটিটিকে বাধা দিতে পারে তবে অন্যকে পরিচয় করিয়ে দিতে পারে।

আমি সাধারণত একটি ফাইলের অতিরিক্ত ডেটা পড়ার পরে এটিকে পেতে পারি তারপরে read_csv () পদ্ধতিটি ব্যবহার করি।

আপনার প্রকৃত ফাইলের উপর নির্ভর করে সঠিক সমাধানটি আলাদা হতে পারে তবে এই পদ্ধতিটি বেশ কয়েকটি ক্ষেত্রে আমার পক্ষে কাজ করেছে


6

নিম্নলিখিতগুলি আমার পক্ষে কাজ করেছে (আমি এই উত্তরটি পোস্ট করেছি, কারণ গুগল কোলাবোটারি নোটবুকটিতে আমার বিশেষত এই সমস্যা ছিল):

df = pd.read_csv("/path/foo.csv", delimiter=';', skiprows=0, low_memory=False)

1
|আমার .csv- এর ডিলিমিটার হিসাবে সেট না করার সময় আমি সমস্যাগুলি পরীক্ষা করেছি। আমি প্রথমে প্রথমে এই পদ্ধতির চেষ্টা করার পরিবর্তে লাইন বা খারাপ লাইনের পরিবর্তে।
ivanleoncz

আমারও একই সমস্যা ছিল, আমি ধরে নিয়েছিলাম "\ t" ডিফল্টরূপে একটি সীমানা হিসাবে সনাক্ত করা হবে। এটি কাজ করেছিল যখন আমি স্পষ্টভাবে "to t" এ ডিলিমিটার সেট করি।
রাহুল ঝা

5

স্পেস, কমা এবং উদ্ধৃতি সহ একটি ট্যাব-বিস্মৃত টেবিলটি পড়ার চেষ্টা করার সময় আমার একই সমস্যা হয়েছিল:

1115794 4218    "k__Bacteria", "p__Firmicutes", "c__Bacilli", "o__Bacillales", "f__Bacillaceae", ""
1144102 3180    "k__Bacteria", "p__Firmicutes", "c__Bacilli", "o__Bacillales", "f__Bacillaceae", "g__Bacillus", ""
368444  2328    "k__Bacteria", "p__Bacteroidetes", "c__Bacteroidia", "o__Bacteroidales", "f__Bacteroidaceae", "g__Bacteroides", ""



import pandas as pd
# Same error for read_table
counts = pd.read_csv(path_counts, sep='\t', index_col=2, header=None, engine = 'c')

pandas.io.common.CParserError: Error tokenizing data. C error: out of memory

এটি বলেছে এর সি পার্সিং ইঞ্জিনের সাথে কিছু করার আছে (এটি ডিফল্ট একটি)। অজগর এক পরিবর্তন হতে পারে কিছু পরিবর্তন হবে

counts = pd.read_table(path_counts, sep='\t', index_col=2, header=None, engine='python')

Segmentation fault (core dumped)

এখন এটি একটি ভিন্ন ত্রুটি।
যদি আমরা এগিয়ে যাই এবং টেবিল থেকে ফাঁকা স্থানগুলি সরিয়ে দেওয়ার চেষ্টা করি তবে পাইথন-ইঞ্জিন থেকে ত্রুটিটি আবার পরিবর্তন হয়:

1115794 4218    "k__Bacteria","p__Firmicutes","c__Bacilli","o__Bacillales","f__Bacillaceae",""
1144102 3180    "k__Bacteria","p__Firmicutes","c__Bacilli","o__Bacillales","f__Bacillaceae","g__Bacillus",""
368444  2328    "k__Bacteria","p__Bacteroidetes","c__Bacteroidia","o__Bacteroidales","f__Bacteroidaceae","g__Bacteroides",""


_csv.Error: '   ' expected after '"'

এবং এটি স্পষ্ট হয়ে যায় যে পান্ডাসগুলিতে আমাদের সারিগুলি বিশ্লেষণ করতে সমস্যা হচ্ছিল। পাইথন ইঞ্জিনের সাহায্যে একটি টেবিল বিশ্লেষণ করতে আমার আগে থেকেই টেবিল থেকে সমস্ত স্পেস এবং কোট সরিয়ে ফেলতে হবে। ইতিমধ্যে সি-ইঞ্জিন সারি কমা দিয়েও ক্র্যাশ করে চলেছিল।

প্রতিস্থাপনগুলি সহ একটি নতুন ফাইল তৈরি এড়াতে আমি এটি করেছি, কারণ আমার টেবিলগুলি ছোট:

from io import StringIO
with open(path_counts) as f:
    input = StringIO(f.read().replace('", ""', '').replace('"', '').replace(', ', ',').replace('\0',''))
    counts = pd.read_table(input, sep='\t', index_col=2, header=None, engine='python')

tl; dr
পার্সিং ইঞ্জিন পরিবর্তন করুন, আপনার ডেটাতে কোনও অ-সীমাবদ্ধ উদ্ধৃতি / কমা / স্পেস এড়াতে চেষ্টা করুন।


5

আমি যে ডেটাসেটটি ব্যবহার করেছি তাতে অনেকগুলি উদ্ধৃতি চিহ্ন রয়েছে (") বিন্যাসের বহিরাগত ব্যবহার করা হয়েছিল for আমি এই পরামিতিটি যুক্ত করে ত্রুটিটি ঠিক করতে সক্ষম হয়েছি read_csv():

quoting=3 # 3 correlates to csv.QUOTE_NONE for pandas

2
ঠিক একই জিনিস জুড়ে হোঁচট খাচ্ছে। যতদূর আমি উদ্বিগ্ন, এটি সঠিক উত্তর। গৃহীত একজন কেবল ত্রুটিটি আড়াল করে।
lhk

আমার জন্যও সঠিক উত্তর। +1
তাহা জিরজেস


3

যদিও এই প্রশ্নের ক্ষেত্রে না হলেও, এই ত্রুটিটি সংকুচিত ডেটা সহ প্রদর্শিত হতে পারে। স্পষ্টভাবে kwarg compressionআমার সমস্যার সমাধানের জন্য মান সেট করা ।

result = pandas.read_csv(data_source, compression='gzip')

3

অনুরূপ পার্সিং ত্রুটিগুলি মোকাবেলায় আমি দরকারী বলে মনে করেছি যে বিকল্পগুলি পান্ডাস ডিএফ-তে ডেটা পুনরায় রুট করার জন্য সিএসভি মডিউলটি ব্যবহার করে। উদাহরণ স্বরূপ:

import csv
import pandas as pd
path = 'C:/FileLocation/'
file = 'filename.csv'
f = open(path+file,'rt')
reader = csv.reader(f)

#once contents are available, I then put them in a list
csv_list = []
for l in reader:
    csv_list.append(l)
f.close()
#now pandas has no problem getting into a df
df = pd.DataFrame(csv_list)

আমি CSV মডিউলটি খারাপভাবে ফর্ম্যাটেড কমা দ্বারা পৃথক করা ফাইলগুলির থেকে কিছুটা শক্তিশালী বলে মনে করি এবং এর মতো সমস্যাগুলি সমাধান করার জন্য এই রুটে সাফল্য পেয়েছি।


3

কমান্ডগুলির নিম্নলিখিত ক্রমটি কাজ করে (আমি ডেটাটির প্রথম লাইনটি হারিয়ে ফেলছি - কোনও শিরোনাম উপস্থিত নেই = উপস্থিত নেই, তবে অন্তত এটি লোড হয়):

df = pd.read_csv(filename, usecols=range(0, 42)) df.columns = ['YR', 'MO', 'DAY', 'HR', 'MIN', 'SEC', 'HUND', 'ERROR', 'RECTYPE', 'LANE', 'SPEED', 'CLASS', 'LENGTH', 'GVW', 'ESAL', 'W1', 'S1', 'W2', 'S2', 'W3', 'S3', 'W4', 'S4', 'W5', 'S5', 'W6', 'S6', 'W7', 'S7', 'W8', 'S8', 'W9', 'S9', 'W10', 'S10', 'W11', 'S11', 'W12', 'S12', 'W13', 'S13', 'W14']

নিম্নলিখিতগুলি কাজ করে না:

df = pd.read_csv(filename, names=['YR', 'MO', 'DAY', 'HR', 'MIN', 'SEC', 'HUND', 'ERROR', 'RECTYPE', 'LANE', 'SPEED', 'CLASS', 'LENGTH', 'GVW', 'ESAL', 'W1', 'S1', 'W2', 'S2', 'W3', 'S3', 'W4', 'S4', 'W5', 'S5', 'W6', 'S6', 'W7', 'S7', 'W8', 'S8', 'W9', 'S9', 'W10', 'S10', 'W11', 'S11', 'W12', 'S12', 'W13', 'S13', 'W14'], usecols=range(0, 42))

CParserError: ডেটা টোকেনাইজ করার সময় ত্রুটি। সি ত্রুটি: 1605634 লাইনে প্রত্যাশিত 53 ক্ষেত্রগুলি দেখেছেন 54 নিম্নলিখিতগুলি কাজ করছে না:

df = pd.read_csv(filename, header=None)

CParserError: ডেটা টোকেনাইজ করার সময় ত্রুটি। সি ত্রুটি: 1605634 লাইনে 53 ক্ষেত্র প্রত্যাশিত, 54 দেখেছে

সুতরাং, আপনার সমস্যায় আপনাকে পাস করতে হবে usecols=range(0, 2)


3

যারা লিনাক্স ওএসে পাইথন 3 নিয়ে একই ধরণের সমস্যা রয়েছে তাদের জন্য।

pandas.errors.ParserError: Error tokenizing data. C error: Calling
read(nbytes) on source failed. Try engine='python'.

চেষ্টা করুন:

df.read_csv('file.csv', encoding='utf8', engine='python')

2

কখনও কখনও সমস্যাটি কীভাবে অজগরটি ব্যবহার করবেন তা নয়, তবে কাঁচা ডেটা দিয়ে।
আমি এই ত্রুটি বার্তা পেয়েছি

Error tokenizing data. C error: Expected 18 fields in line 72, saw 19.

দেখা গেল যে কলাম বর্ণনায় কখনও কখনও কমা ছিল। এর অর্থ হল যে সিএসভি ফাইলটি পরিষ্কার করা বা অন্য কোনও বিভাজক ব্যবহার করা দরকার।


2

ব্যবহার pandas.read_csv('CSVFILENAME',header=None,sep=', ')

লিঙ্কটি থেকে সিএসভি ডেটা পড়ার চেষ্টা করার সময়

http://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data

আমি সাইট থেকে ডেটা আমার সিএসভিফাইলে অনুলিপি করেছি। এটিতে অতিরিক্ত স্পেস ছিল তাই সেপ = ',' ব্যবহৃত হয়েছিল এবং এটি কাজ করেছে :)


1

আমার প্রেক্সিস্টিং সারি সংখ্যা সহ একটি ডেটাসেট ছিল, আমি সূচি_কোল ব্যবহার করেছি:

pd.read_csv('train.csv', index_col=0)

1

এটাই আমি করেছি।

sep='::' আমার সমস্যা সমাধান:

data=pd.read_csv('C:\\Users\\HP\\Downloads\\NPL ASSINGMENT 2 imdb_labelled\\imdb_labelled.txt',engine='python',header=None,sep='::')


1

পড়ার_সিএসভি: পার্সার এরর: ডেটা টোকিনাইজ করার সময় ত্রুটি। আমি সদ্য পুরানো সিএসভি ফাইলটি একটি নতুন সিএসভি ফাইলে সংরক্ষণ করেছি। সমস্যাটি সমাধানকৃত!


1

আমার জন্য সমস্যাটি ছিল আমার CSV ইন্ট্রাডায় একটি নতুন কলাম যুক্ত করা হয়েছিল । গৃহীত উত্তরের সমাধানটি কাজ করবে না কারণ আমি ব্যবহার করলে ভবিষ্যতের প্রতিটি সারি ফেলে দেওয়া হবে error_bad_lines=False

এই ক্ষেত্রে সমাধানটি ছিল ইউলকোলস প্যারামিটারটি ব্যবহার করা pd.read_csv()। এইভাবে আমি কেবলমাত্র কলামগুলি নির্দিষ্ট করতে পারি যেগুলি আমাকে সিএসভিতে পড়তে হবে এবং আমার পাইথন কোডটি ভবিষ্যতে সিএসভি পরিবর্তনের জন্য দীর্ঘায়িত থাকবে যতক্ষণ একটি শিরোনাম কলাম উপস্থিত থাকবে (এবং কলামের নাম পরিবর্তন হয় না)।

usecols : list-like or callable, optional 

Return a subset of the columns. If list-like, all elements must either
be positional (i.e. integer indices into the document columns) or
strings that correspond to column names provided either by the user in
names or inferred from the document header row(s). For example, a
valid list-like usecols parameter would be [0, 1, 2] or ['foo', 'bar',
'baz']. Element order is ignored, so usecols=[0, 1] is the same as [1,
0]. To instantiate a DataFrame from data with element order preserved
use pd.read_csv(data, usecols=['foo', 'bar'])[['foo', 'bar']] for
columns in ['foo', 'bar'] order or pd.read_csv(data, usecols=['foo',
'bar'])[['bar', 'foo']] for ['bar', 'foo'] order.

উদাহরণ

my_columns = ['foo', 'bar', 'bob']
df = pd.read_csv(file_path, usecols=my_columns)

এর আর একটি সুবিধা হ'ল আমি যদি মেমোরিতে কিছুটা কম ডেটা লোড করতে পারি তবে আমি কেবলমাত্র একটি সিএসভির 3-4 টি কলাম ব্যবহার করছি যাতে 18-20 কলাম রয়েছে।


1

সরল রেজোলিউশন : সিএসভি ফাইলটি এক্সেলে খুলুন এবং সিএসভি ফর্ম্যাটের বিভিন্ন নামের ফাইলের সাথে এটি সংরক্ষণ করুন। আবার এটি স্পাইডার আমদানির চেষ্টা করুন, আপনার সমস্যাটি সমাধান হয়ে যাবে!


1

আমি একটি বিপথগামী উদ্ধৃতি চিহ্ন দিয়ে এই ত্রুটির সম্মুখীন হয়েছি। আমি ম্যাপিং সফটওয়্যার ব্যবহার করি যা কমা-সীমাবদ্ধ ফাইল রফতানি করার সময় পাঠ্য আইটেমগুলির চারপাশে উদ্ধৃতি চিহ্নগুলি রাখে। পাঠ্য যা উদ্ধৃতি চিহ্ন ব্যবহার করে (উদাহরণস্বরূপ '= ফুট এবং "= ইঞ্চি) তখন ডিলিমিটারের সংঘর্ষকে প্ররোচিত করে proble

UWI_key,Latitude,Longitude,Remark US42051316890000,30.4386484,-96.4330734,"poor 5""

কাজগুলিতে একটি রেঞ্চ ছুঁড়ে শেষের 5"জন্য শর্টহ্যান্ড হিসাবে ব্যবহার করা 5 inch। এক্সেল কেবল অতিরিক্ত উদ্ধৃতি চিহ্নটি সরিয়ে ফেলবে, তবে পান্ডরা error_bad_lines=Falseউপরে বর্ণিত যুক্তি ছাড়াই ভেঙে পড়বে ।


1

আমি যতদূর বলতে পারি এবং আপনার ফাইলটি একবার দেখার পরে, সমস্যাটি হ'ল আপনি যে সিএসভি ফাইলটি লোড করার চেষ্টা করছেন তার একাধিক টেবিল রয়েছে। খালি রেখা বা লাইন রয়েছে যাতে টেবিল শিরোনাম রয়েছে। এই স্ট্যাকওভারফ্লো উত্তরটি একবার দেখার চেষ্টা করুন । এটি দেখায় যে কীভাবে প্রোগ্রামটিভ্যালি অর্জন করা যায়।

এটি করার জন্য আর একটি গতিশীল পন্থা হ'ল সিএসভি মডিউলটি ব্যবহার করা , প্রতিটি একক সারিতে একবারে পড়া এবং স্যানিটি চেক / নিয়মিত অভিব্যক্তি তৈরি করা, সারিটি (শিরোনাম / শিরোনাম / মান / ফাঁকা) হয় কিনা তা নির্ধারণ করার জন্য। এই পদ্ধতির সাথে আপনার আরও একটি সুবিধা রয়েছে, যা আপনি ইচ্ছা হিসাবে পাইথন অবজেক্টগুলিতে আপনার ডেটা বিভক্ত / সংযুক্ত / সংগ্রহ করতে পারেন।

সবচেয়ে সহজ হ'ল pd.read_clipboard()ম্যানুয়ালি ক্লিপবোর্ডে টেবিলটি নির্বাচন করে এবং অনুলিপি করার পরে প্যান্ডাস ফাংশনটি ব্যবহার করা সেক্ষেত্রে আপনি এক্সেল বা কোনও কিছুতে সিএসভি খুলতে পারবেন।

অপ্রাসঙ্গিক :

তদতিরিক্ত, আপনার সমস্যার সাথে অপ্রাসঙ্গিক, তবে কারণ এটির বিষয়ে কেউ উল্লেখ করেনি : seeds_dataset.txtইউসিআই থেকে কিছু ডেটাসেট লোড করার সময় আমার একই সমস্যা ছিল । আমার ক্ষেত্রে, ত্রুটিটি ঘটছিল কারণ কিছু বিভাজনকারীদের সত্যিকারের ট্যাবটির চেয়ে আরও সাদা অংশ রয়েছে \t। উদাহরণস্বরূপ নিম্নলিখিত লাইন 3 দেখুন

14.38   14.21   0.8951  5.386   3.312   2.462   4.956   1
14.69   14.49   0.8799  5.563   3.259   3.586   5.219   1
14.11   14.1    0.8911  5.42    3.302   2.7     5       1

সুতরাং \t+পরিবর্তে বিভাজক প্যাটার্ন ব্যবহার করুন \t

data = pd.read_csv(path, sep='\t+`, header=None)

1

আমার ক্ষেত্রে এটি কারণ সিএসভি ফাইলের প্রথম এবং শেষ দুটি লাইনের বিন্যাসটি ফাইলের মধ্যবর্তী সামগ্রী থেকে পৃথক।

সুতরাং আমি যা করি তা হল CSV ফাইলটিকে স্ট্রিং হিসাবে খুলুন, স্ট্রিংয়ের বিষয়বস্তু বিশ্লেষণ করুন, তারপরে read_csvএকটি ডেটাফ্রেম পেতে ব্যবহার করুন ।

import io
import pandas as pd

file = open(f'{file_path}/{file_name}', 'r')
content = file.read()

# change new line character from '\r\n' to '\n'
lines = content.replace('\r', '').split('\n')

# Remove the first and last 2 lines of the file
# StringIO can be considered as a file stored in memory
df = pd.read_csv(StringIO("\n".join(lines[2:-2])), header=None)

1

আমার ক্ষেত্রে বিভাজকটি ডিফল্ট "," নয় তবে ট্যাব ছিল।

pd.read_csv(file_name.csv, sep='\\t',lineterminator='\\r', engine='python', header='infer')

দ্রষ্টব্য: "\ t" কিছু উত্স দ্বারা প্রস্তাবিত হিসাবে কাজ করে না। "\\ t" দরকার ছিল।


0

আমার একটি অনুরূপ ত্রুটি ছিল এবং সমস্যাটি হ'ল আমার সিএসভি ফাইলে আমার কিছু পালানোর উদ্ধৃতি ছিল এবং যথাযথভাবে এস্কেপচার প্যারামিটার সেট করতে হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.