मैं अभी भी अजगर सीख रहा हूं, कृपया क्षमा करें यदि प्रश्न कुछ के लिए तुच्छ लगता है।
मेरे पास निम्नलिखित प्रारूप के साथ एक सीएसवी फ़ाइल है और मैं इसका एक छोटा खंड निकालना चाहता हूं और दूसरी सीएसवी फ़ाइल को लिखना चाहता हूं:
तो, मैं यही करना चाहता हूं:
- बस अभिनेता_सूची 2 और संबंधित आईडी कॉलम के तहत प्रविष्टियां निकालें और इसे निम्नलिखित प्रारूप में एक सीएसवी फ़ाइल में लिखें।
चूंकि प्रारूप कुछ मूल्यों के बाद नियमित कॉलम हेडर नहीं है, मुझे यकीन नहीं है कि किसी विशेष कॉलम में सेल वैल्यू के आधार पर शुरुआती बिंदु का चयन कैसे करें। भले ही हम अभिनेता_सूची 2 पर विचार करें, फिर उसके अंतर्गत कितनी भी प्रविष्टियाँ हो सकती हैं। कृपया मुझे यह समझने में मदद करें कि क्या यह पांडा डेटाफ्रेम प्रोसेसिंग क्षमता का उपयोग करके किया जा सकता है।
अद्यतन: इसका कारण यह है कि मैं इसे स्वचालित करना चाहूंगा क्योंकि ऐसी हजारों फाइलें हो सकती हैं और अंतिम सीएसवी फ़ाइल बनाने के लिए उस जानकारी को मैन्युअल रूप से प्राप्त करना अव्यावहारिक होगा जिसमें अनिवार्य रूप से प्रत्येक फ़ाइल के लिए एक पंक्ति होगी।
2 जवाब
जैसा कि नूर-अल्लाह ने बताया है कि यहाँ स्वरूपण बहुत कम से कम कहने के लिए नियमित नहीं है। सबसे अच्छा आप यह कर सकते हैं यदि ऐसा है कि आपका डेटा हर बार इस तरह से बाहर आता है तो फ़ाइल की कुछ पंक्तियों को छोड़ना है:
import pandas as pd
df = pd.read_csv('blabla.csv', skiprows=list(range(17)), nrows=8)
df_res = df.loc[:, ['actor_list2', 'ID']]
यह आपको परिणाम प्राप्त करना चाहिए लेकिन यह देखते हुए कि कितना अनिश्चित स्वरूपण है, यह स्वचालित करने का कोई तरीका नहीं है। क्या होगा अगर अगली बार कोई और अभिनेता हो? या एक कम? यहां तक कि नूर-अल्लाह का हल भी वहां मदद नहीं करेगा।
ईमानदारी से, आपको बस बेहतर डेटा मिलना चाहिए।
चूंकि CSV
फ़ाइल आपके पास नियमित नहीं है, इसलिए बहुत सारी खाली स्थिति, जिसमें 'नैन' ऑब्जेक्ट शामिल हैं। इस बीच, स्तंभों को अनुक्रमित किया जाएगा।
मैं पढ़ने के लिए पांडा का उपयोग करूंगा
import pandas as pd
df = pd.read_csv("not_regular_format.csv", header=None)
फिर, डिक्शनरी को इनिशियलाइज़ करें और खाली करें ताकि परिणामों को स्टोर किया जा सके, और आउटपुट डेटाफ़्रेम बनाने के लिए इसका उपयोग किया जा सके, जो अंत में अपनी सामग्री को CSV
फ़ाइल में भेजता है।
target={}
अब आपको दूसरे कॉलम में actor_list2
खोजने की जरूरत है जो कि इंडेक्स 0
वाला कॉलम है, और अगर यह मौजूद है, तो नाम और स्कोर को अगली पंक्तियों और कॉलम में स्टोर करना शुरू करें 1
और 2
शब्दकोश में target
rows_index = df[df[1] == 'actor_list2'].index
if len(rows_index) > 0:
i = rows_index[0]
while True:
i += 1
name = df.iloc[i, 1]
score = df.iloc[i, 2]
if pd.isna(name): # the names sequence is finished and 'nan' object exists.
break
target[name] = [score]
और अंत में, डेटाफ़्रेम का निर्माण करें और नई output.csv
फ़ाइल लिखें
df_output=pd.DataFrame(target)
df_output.to_csv('output.csv')
अब, आप ऊपर दिए गए उदाहरण के साथ कहीं भी जा सकते हैं।
आपको कामयाबी मिले
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।