शीर्ष पंक्ति के साथ हेडर की जगह पाइथन पंडास


83

वर्तमान में मेरे पास एक डेटाफ्रेम है जो इस तरह दिखता है:

           Unnamed: 1    Unnamed: 2   Unnamed: 3  Unnamed: 4
0   Sample Number  Group Number  Sample Name  Group Name
1             1.0           1.0          s_1         g_1
2             2.0           1.0          s_2         g_1
3             3.0           1.0          s_3         g_1
4             4.0           2.0          s_4         g_2

मैं शीर्ष लेख पंक्ति को हटाने और पहली पंक्ति को नई शीर्ष लेख पंक्ति बनाने के लिए खोज रहा हूँ, इसलिए नया डेटाफ़्रेम इस तरह दिखेगा:

    Sample Number  Group Number  Sample Name  Group Name
0             1.0           1.0          s_1         g_1
1             2.0           1.0          s_2         g_1
2             3.0           1.0          s_3         g_1
3             4.0           2.0          s_4         g_2

मैंने सामान की कोशिश की है if 'Unnamed' in df.columns:फिर हेडर के बिना डेटाफ्रेम बनायें df.to_csv(newformat,header=False,index=False)लेकिन मुझे कहीं भी ऐसा प्रतीत नहीं हो रहा है।

जवाबों:


152
new_header = df.iloc[0] #grab the first row for the header
df = df[1:] #take the data less the header row
df.columns = new_header #set the header row as the df header



3

@ostrokach जवाब सबसे अच्छा है। सबसे अधिक संभावना है कि आप डेटाफ़्रेम के किसी भी संदर्भ में इस प्रकार रखना चाहेंगे, इस प्रकार inplace = true से लाभ होगा।
df.rename(columns=df.iloc[0], inplace = True) df.drop([0], inplace = True)


2

यहां एक सरल ट्रिक है जो कॉलम इंडिक्स को "जगह में" परिभाषित करता है। क्योंकि पंक्ति सूचकांकों को जगह में set_indexसेट किया जाता है, हम डेटा फ़्रेम को ट्रांसफ़ॉर्म करके, इंडेक्स सेट करके, और इसे वापस ट्रांसफ़ॉर्म करके कॉलम के लिए एक ही काम कर सकते हैं:

df = df.T.set_index(0).T

ध्यान दें कि आप को बदलने के लिए हो सकता है 0में set_index(0)अगर अपनी पंक्तियों को एक अलग सूचकांक पहले से ही है।


2

पायथन स्वैपिंग का उपयोग करते हुए एक और वन-लाइनर:

df, df.columns = df[1:] , df.iloc[0]

यह अनुक्रमणिका को रीसेट नहीं करेगा

हालाँकि, उम्मीद के विपरीत काम नहीं करेगा df.columns, df = df.iloc[0], df[1:]


0

- ऐसा करने का आसान तरीका


df.columns = df.iloc[0]
df = df.reindex(df.index.drop(0)).reset_index(drop=True)
df.columns.name = None

    Sample Number  Group Number  Sample Name  Group Name
0             1.0           1.0          s_1         g_1
1             2.0           1.0          s_2         g_1
2             3.0           1.0          s_3         g_1
3             4.0           2.0          s_4         g_2

यदि आप इसे पसंद करते हैं तो तीर मारा। धन्यवाद


0
header = table_df.iloc[0]
table_df.drop([0], axis =0, inplace=True)
table_df.reset_index(drop=True)
table_df.columns = header
table_df

कृपया एक स्पष्टीकरण जोड़ें
vsync

0

सबसे अच्छा अभ्यास और सर्वश्रेष्ठ वनलाइनर :

df.to_csv(newformat,header=1)

हेडर मान पर ध्यान दें:

स्तंभ के नाम के रूप में उपयोग करने के लिए हैडर पंक्ति संख्या (ओं) को संदर्भित करता है। कोई गलती न करें, पंक्ति संख्या df नहीं है, लेकिन एक्सेल फ़ाइल से (0 पहली पंक्ति है, 1 दूसरी है और इसलिए)।

इस तरह, आपको वह कॉलम नाम मिल जाएगा जो आप चाहते हैं और आपको अतिरिक्त कोड लिखना या नया df नहीं बनाना होगा।

अच्छी बात यह है कि यह बदली हुई पंक्ति को गिराता है।


यह सिर्फ CSV आउटपुट करता है, हालांकि यह डेटाफ़्रेम नहीं बदलता है, है ना?
एएमसी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.