मैंने इसका विश्लेषण करने के लिए इंटरनेट से फुटबॉल डेटा का एक गुच्छा डाउनलोड किया (लगभग 30 सीएसवी फाइलें)। प्रत्येक सीज़न का गेम डेटा अलग-अलग डेटा कॉलम वाली CSV फ़ाइल के रूप में सहेजा जाता है। कुछ डेटा कॉलम सभी फाइलों के लिए सामान्य हैं उदा। होम टीम, अवे टीम, पूर्णकालिक परिणाम, रेफरी का नाम, आदि...

पिछले वर्षों के सीएसवी डेटा कॉलम चित्र - ये कॉलम सभी सीएसवी के लिए सामान्य हैं

हालाँकि हाल के वर्षों में डेटा अधिक समृद्ध हो गया है और इसमें कुछ नए डेटा कॉलम हैं उदा। घरेलू टीम के लिए कॉर्नर, अवे टीम के लिए कॉर्नर, प्रत्येक टीम के लिए पीला कार्ड, प्रत्येक पक्ष के लिए गोल पर शॉट, आदि...

हाल के वर्षों के सीएसवी डेटा कॉलम चित्र - इसमें सामान्य कॉलम के साथ-साथ अतिरिक्त भी शामिल हैं

मैंने एक सामान्य कार्य किया जो प्रत्येक सीज़न के सीएसवी गेमवीक डेटा को लेता है और इसे अलग-अलग आंकड़ों के साथ एक पूर्ण तालिका (सीज़न के अंत में कैसा दिखता है) में बदल देता है। अब जब मैं सामान्य डेटा कॉलम से प्रत्येक सीज़न की "अंतिम-दिन" तालिका बनाने का प्रयास करता हूं तो सब कुछ ठीक काम करता है, हालांकि, जब मैं असामान्य कॉलम (उदाहरण के लिए कोनों) में फेंकने का प्रयास करता हूं तो मुझे एक त्रुटि मिलती है। यह मेरे लिए कोई आश्चर्य की बात नहीं है और मुझे पता है कि कैसे एक सीएसवी में एक निश्चित कॉलम शामिल है, लेकिन मैं जानना चाहता हूं कि डेटासेट को एक निश्चित कॉलम लेने के लिए आदेश देने का कोई चतुर तरीका है (कहें 'कॉर्नर' ) और अगर यह मौजूद नहीं है तो बस इस कॉलम को छोड़ दें।

मैं उस फ़ंक्शन का हिस्सा प्रस्तुत करता हूं जो त्रुटि को बढ़ाता है। अंतिम पंक्ति समस्याग्रस्त है। जब मैं केवल सामान्य कॉलम छोड़ देता हूं (यानी एफटीआर के बाद प्रत्येक कॉलम को हटा रहा हूं) तो फ़ंक्शन ठीक काम करता है। सामान्य तौर पर कोड को उस समय 1 सीज़न मिलता है और तालिका बनाता है।

# create a pandas dataframe of a specific season before the season started
# returns a pandas dataframe with the year of the season and the teams involved with initialized stats
# path is the full path of the file retained by glob function, and raw_data is a pandas dataframe read directly from the CSV
def create_initial_table(path, raw_data):
# extracts the season's year
season_number = path[path.index("/") + 1:path.index(".")]
# reduce the information to the relevant columns
raw_data = raw_data[['HomeTeam', 'AwayTeam', 'FTHG', 'FTAG', 'FTR', 'HS', 'AS', 'HST', 'AST', 'HC', 'AC']]

इस नक्षत्र के साथ मैं जारी रखना चाहता हूं। यानी जब कॉलम का नाम मौजूद नहीं है तो बस अगले कॉलम पर जाएं और इसी तरह जब तक मौजूद रहें और जो मौजूद नहीं हैं उनमें कोई त्रुटि न हो।

बाद के कार्यों में मैं इन स्तंभों (कोनों, लक्ष्य पर शॉट्स, आदि ...) के मूल्यों को भी अपडेट करता हूं, इसलिए वहां भी उसी स्किप कार्यक्षमता की आवश्यकता होती है।

सलाह के लिए धन्यवाद:>

-1
Aqua- 9 अक्टूबर 2020, 00:45

1 उत्तर

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

आप DataFrame.filter(items=...) इस उदाहरण को देख सकते हैं:

all_columns = ['HomeTeam', 'AwayTeam', 'FTHG', 'FTAG', 'FTR', 'HS', 'AS', 'HST', 'AST', 'HC', 'AC']
df = pd.DataFrame(np.random.rand(5, 5), columns=['HomeTeam', 'AwayTeam', 'FTHG', 'FTAG', 'BAD COLUMN'])

print(df)
   HomeTeam  AwayTeam      FTHG      FTAG  BAD COLUMN
0  0.265389  0.523248  0.093941  0.575946    0.929296
1  0.318569  0.667410  0.131798  0.716327    0.289406
2  0.183191  0.586513  0.020108  0.828940    0.004695
3  0.677817  0.270008  0.735194  0.962189    0.248753
4  0.576157  0.592042  0.572252  0.223082    0.952749

भले ही मैं इसे कॉलम नाम खिलाता हूं जो डेटाफ़्रेम में मौजूद नहीं है, यह केवल उन स्तंभों को बाहर निकालेगा जो मौजूद हैं

new_df = df.filter(items=all_columns)

print(new_df)
   HomeTeam  AwayTeam      FTHG      FTAG
0  0.265389  0.523248  0.093941  0.575946
1  0.318569  0.667410  0.131798  0.716327
2  0.183191  0.586513  0.020108  0.828940
3  0.677817  0.270008  0.735194  0.962189
4  0.576157  0.592042  0.572252  0.223082
0
Cameron Riddell 8 अक्टूबर 2020, 21:57