to_csv()
বিদ্যমান সিএসভি ফাইলে ডেটাফ্রেম যুক্ত করতে প্যান্ডাস ফাংশনটি ব্যবহার করা সম্ভব কিনা তা আমি জানতে চাই । CSv ফাইলের লোড হওয়া ডেটার মতোই কাঠামো রয়েছে।
to_csv()
বিদ্যমান সিএসভি ফাইলে ডেটাফ্রেম যুক্ত করতে প্যান্ডাস ফাংশনটি ব্যবহার করা সম্ভব কিনা তা আমি জানতে চাই । CSv ফাইলের লোড হওয়া ডেটার মতোই কাঠামো রয়েছে।
উত্তর:
পান্ডাস to_csv
ফাংশনে আপনি পাইথন রাইট মোড নির্দিষ্ট করতে পারেন । সংযোজনের জন্য এটি 'ক'।
তোমার ক্ষেত্রে:
df.to_csv('my_csv.csv', mode='a', header=False)
ডিফল্ট মোডটি 'ডাব্লু'।
df.to_csv(output_path, mode='a', header=not os.path.exists(output_path))
আপনি অ্যাপেনড মোডে ফাইলটি খোলার মাধ্যমে কোনও সিএসভিতে সংযোজন করতে পারেন :
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
with open(filename, 'a') as f:
df.to_csv(f, header=f.tell()==0)
mode='a'
প্যারামিটার হিসাবে অনুপস্থিত to_csv
(যেমনdf.to_csv(f, mode='a', header=f.tell()==0)
একটি সামান্য সহায়ক ফাংশন আমি এগুলি হ্যান্ডেল করার জন্য কয়েকটি হেডার চেকিং সেফগার্ড সহ ব্যবহার করি:
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)
প্রাথমিকভাবে একটি পাইপार्ক ডেটাফ্রেম দিয়ে শুরু করে - আমার পাইপর্ক ডাটাফ্রেমে স্কিমা / কলামের ধরণ দিয়ে আমি টাইপ রূপান্তর ত্রুটি পেয়েছি (যখন পান্ডস ডিএফ-তে রূপান্তরিত হয়ে সিএসভিতে সংযুক্ত হয়েছি)
প্রতিটি ডিএফ-এর সমস্ত কলামকে স্ট্রিং টাইপের হতে বাধ্য করে এবং এরপরে সিএসভিতে এটি যুক্ত করে সমস্যার সমাধান করুন:
with open('testAppend.csv', 'a') as f:
df2.toPandas().astype(str).to_csv(f, header=False)
পার্টিতে কিছুটা দেরি হলেও আপনি যদি একাধিকবার আপনার ফাইলটি খোলার এবং বন্ধ করতে, বা ডেটা, পরিসংখ্যান ইত্যাদিতে লগিং করেন তবে আপনি একটি প্রসঙ্গ পরিচালকও ব্যবহার করতে পারেন
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)`