কীভাবে বিদ্যমান সিএসভি ফাইলে পান্ডাস ডেটা যুক্ত করবেন?


259

to_csv()বিদ্যমান সিএসভি ফাইলে ডেটাফ্রেম যুক্ত করতে প্যান্ডাস ফাংশনটি ব্যবহার করা সম্ভব কিনা তা আমি জানতে চাই । CSv ফাইলের লোড হওয়া ডেটার মতোই কাঠামো রয়েছে।


6
আমি মনে করি @ ক্লিঙ্গফের পরামর্শ দেওয়া পদ্ধতিটি কেবল ভাল কারণ তিনি পান্ডাস লাইব্রেরির বিল্ট-ইন কার্যকারিতাটি ব্যবহার করছেন। তিনি "এ" হিসাবে সংজ্ঞায়িত মোডের পরামর্শ দেন। "এ" এর অর্থ অ্যাপেন্ডেন্ড 'df.to_csv (' my_csv.csv ', মোড =' এ ', শিরোনাম = মিথ্যা)'
আইরাত

1
সিএসভি ফাইল উপস্থিত না থাকায় (যেমন কলাম শিরোনাম যুক্ত করুন) এবং যখন সিএসভি ইতিমধ্যে উপস্থিত রয়েছে তখন @ কেসিজারের উত্তর উভয় ক্ষেত্রে বিবেচনা করে (সুতরাং শিরোনাম ছাড়াই কেবল ডাটা সারি যুক্ত করুন)। যে কোনও ক্ষেত্রে এটি কলামগুলির সংখ্যার সাথে চেক সহ "অ্যাপেন্ড" মোড এবং একটি কাস্টম বিভাজক ব্যবহার করে।
টিপিপিজেড

উত্তর:


541

পান্ডাস to_csvফাংশনে আপনি পাইথন রাইট মোড নির্দিষ্ট করতে পারেন । সংযোজনের জন্য এটি 'ক'।

তোমার ক্ষেত্রে:

df.to_csv('my_csv.csv', mode='a', header=False)

ডিফল্ট মোডটি 'ডাব্লু'।


7
উত্তর করার জন্য ধন্যবাদ. এটি আমাকে সারি অনুসারে নতুন df সংযোজন করতে অনুমতি দেবে। তবে আপনি কি আমাকে জানাতে পারেন যে আমি কীভাবে কলাম-ভিত্তিতে নতুন ডিএফ যুক্ত করতে পারি?
ডেটানিউ

আমি 'my_csv.csv' পুনরায় পড়ার পরে নতুন ডিএফকে কনক্যাট করে, এবং তারপরে এটি সংরক্ষণ করতে সক্ষম হয়েছি। আপনি যদি কিছু সহজ পদ্ধতি জানেন তবে দয়া করে আমাকে জানান DO আমি প্রশংসা করি!
ডেটানিউ

2
প্রথম ফাইলের জন্য শিরোনাম কীভাবে লিখতে হবে এবং বাকী সারিগুলি স্বয়ংক্রিয়ভাবে এতে যুক্ত হয়ে যায়?
এতিশা

4
@ এতিশার মতো কিছুdf.to_csv(output_path, mode='a', header=not os.path.exists(output_path))
মিশেল টনুট্টি

255

আপনি অ্যাপেনড মোডে ফাইলটি খোলার মাধ্যমে কোনও সিএসভিতে সংযোজন করতে পারেন :

with open('my_csv.csv', 'a') as f:
    df.to_csv(f, header=False)

যদি এটি আপনার CSV ছিল foo.csv:

,A,B,C
0,1,2,3
1,4,5,6

আপনি যদি এটি পড়েন এবং তারপরে সংযোজন করুন উদাহরণস্বরূপ df + 6:

In [1]: df = pd.read_csv('foo.csv', index_col=0)

In [2]: df
Out[2]:
   A  B  C
0  1  2  3
1  4  5  6

In [3]: df + 6
Out[3]:
    A   B   C
0   7   8   9
1  10  11  12

In [4]: with open('foo.csv', 'a') as f:
             (df + 6).to_csv(f, header=False)

foo.csv হয়ে:

,A,B,C
0,1,2,3
1,4,5,6
0,7,8,9
1,10,11,12

50
with open(filename, 'a') as f:
    df.to_csv(f, header=f.tell()==0)
  • উপস্থিত না থাকলে ফাইল তৈরি করুন, অন্যথায় সংযোজন করুন
  • যদি ফাইল তৈরি হচ্ছে তবে শিরোনাম যুক্ত করুন, অন্যথায় এড়িয়ে যান

2
এটি mode='a'প্যারামিটার হিসাবে অনুপস্থিত to_csv(যেমনdf.to_csv(f, mode='a', header=f.tell()==0)
গ্যাব্রিয়েলা মেলো

2
@ গ্যাব্রিয়েলা মেলো এটি ফাংশনে খোলা হয়েছে (ফাইলের নাম, 'এ')।
পীযুষ

21

একটি সামান্য সহায়ক ফাংশন আমি এগুলি হ্যান্ডেল করার জন্য কয়েকটি হেডার চেকিং সেফগার্ড সহ ব্যবহার করি:

def appendDFToCSV_void(df, csvFilePath, sep=","):
    import os
    if not os.path.isfile(csvFilePath):
        df.to_csv(csvFilePath, mode='a', index=False, sep=sep)
    elif len(df.columns) != len(pd.read_csv(csvFilePath, nrows=1, sep=sep).columns):
        raise Exception("Columns do not match!! Dataframe has " + str(len(df.columns)) + " columns. CSV file has " + str(len(pd.read_csv(csvFilePath, nrows=1, sep=sep).columns)) + " columns.")
    elif not (df.columns == pd.read_csv(csvFilePath, nrows=1, sep=sep).columns).all():
        raise Exception("Columns and column order of dataframe and csv file do not match!!")
    else:
        df.to_csv(csvFilePath, mode='a', index=False, sep=sep, header=False)

1
কলাম অর্ডার না মিললে আমরা কী করতে পারি?
জেসন গোল

@ জেসনগোয়াল ডিএফ = ডিএফ.রেইন্ডেক্স (সাজানো (ডিএফ। কলাম), অক্ষ = 1); দেখতে stackoverflow.com/a/11067072/9095840
মার্কেমাস

4

প্রাথমিকভাবে একটি পাইপार्ক ডেটাফ্রেম দিয়ে শুরু করে - আমার পাইপর্ক ডাটাফ্রেমে স্কিমা / কলামের ধরণ দিয়ে আমি টাইপ রূপান্তর ত্রুটি পেয়েছি (যখন পান্ডস ডিএফ-তে রূপান্তরিত হয়ে সিএসভিতে সংযুক্ত হয়েছি)

প্রতিটি ডিএফ-এর সমস্ত কলামকে স্ট্রিং টাইপের হতে বাধ্য করে এবং এরপরে সিএসভিতে এটি যুক্ত করে সমস্যার সমাধান করুন:

with open('testAppend.csv', 'a') as f:
    df2.toPandas().astype(str).to_csv(f, header=False)

3

পার্টিতে কিছুটা দেরি হলেও আপনি যদি একাধিকবার আপনার ফাইলটি খোলার এবং বন্ধ করতে, বা ডেটা, পরিসংখ্যান ইত্যাদিতে লগিং করেন তবে আপনি একটি প্রসঙ্গ পরিচালকও ব্যবহার করতে পারেন

from contextlib import contextmanager
import pandas as pd
@contextmanager
def open_file(path, mode):
     file_to=open(path,mode)
     yield file_to
     file_to.close()


##later
saved_df=pd.DataFrame(data)
with open_file('yourcsv.csv','r') as infile:
      saved_df.to_csv('yourcsv.csv',mode='a',header=False)`
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.