पंडों DataFrame के लिए कॉलम हेडर में पंक्ति बदलें,


111

मुझे जिस डेटा के साथ काम करना है वह थोड़ा गड़बड़ है। इसके डेटा के अंदर हेडर के नाम हैं। मैं एक मौजूदा पांडा डेटाफ़्रेम से एक पंक्ति कैसे चुन सकता हूं और इसे बना सकता हूं (इसका नाम बदलकर) एक कॉलम हैडर?

मैं कुछ ऐसा करना चाहता हूं:

header = df[df['old_header_name1'] == 'new_header_name1']

df.columns = header

जवाबों:


196
In [21]: df = pd.DataFrame([(1,2,3), ('foo','bar','baz'), (4,5,6)])

In [22]: df
Out[22]: 
     0    1    2
0    1    2    3
1  foo  bar  baz
2    4    5    6

दूसरी पंक्ति (इंडेक्स लोकेशन 1) में मानों को बराबर करने के लिए कॉलम लेबल सेट करें:

In [23]: df.columns = df.iloc[1]

यदि अनुक्रमणिका में अद्वितीय लेबल हैं, तो आप 2 पंक्ति का उपयोग करके छोड़ सकते हैं:

In [24]: df.drop(df.index[1])
Out[24]: 
1 foo bar baz
0   1   2   3
2   4   5   6

यदि सूचकांक अद्वितीय नहीं है, तो आप उपयोग कर सकते हैं:

In [133]: df.iloc[pd.RangeIndex(len(df)).drop(1)]
Out[133]: 
1 foo bar baz
0   1   2   3
2   4   5   6

उपयोग करने से दूसरी पंक्ति के समान लेबल वाली सभी पंक्तियों df.drop(df.index[1])को हटा दिया जाता है। क्योंकि गैर-अनूठे सूचकांक इस तरह से ठोकरें (या संभावित कीड़े) को जन्म दे सकते हैं, इसलिए यह ध्यान रखना बेहतर है कि सूचकांक अद्वितीय है (भले ही पंडों को इसकी आवश्यकता नहीं है)।


आपकी त्वरित प्रतिक्रिया के लिए बहुत - बहुत धन्यवाद! मैं इसे शीर्ष लेख बनाने के लिए अनुक्रमणिका स्थान के अनुसार मूल्य से एक पंक्ति कैसे चुन सकता हूं? तो आपके उदाहरण के लिए कुछ .. df.columns = df [df [0] == 'foo']
EK

इसके साथ समस्या यह है कि एक से अधिक पंक्ति हो सकती हैं जिसका मूल्य है "foo"। उस समस्या का एक तरीका स्पष्ट रूप से पहली ऐसी पंक्ति को चुनना है df.columns = df.iloc[np.where(df[0] == 'foo')[0][0]]:।
unutbu

आह मैं देख रहा हूं कि आपने ऐसा क्यों किया। मेरे मामले के लिए, मुझे पता है कि केवल एक पंक्ति है जिसका मूल्य "फू" है। तो यह ठीक है। मैंने बस इस तरह से किया था मुझे लगता है कि यह वही है जो आपने मुझे दिया था। idx_loc = df [df [0] == 'foo']। index.tolist () [0] df.columns = df.iloc [idx_loc]
EK

63

यह काम करता है (पांडा v'0.19.2 '):

df.rename(columns=df.iloc[0])

22
आप "हैडर" पंक्ति को जोड़कर हटा सकते हैं.drop(df.index[0])
ओस्ट्रोकैक

मुझे यह वास्तविक स्वीकृत उत्तर से बेहतर लगता है। मुझे लघु ऑनलाइन समाधान पसंद हैं।
जेवियर

13

डेटा फ्रेम को फिर से बनाना आसान होगा। यह भी खरोंच से स्तंभ प्रकार की व्याख्या करेगा।

headers = df.iloc[0]
new_df  = pd.DataFrame(df.values[1:], columns=headers)

4

आप उस पैरामीटर के माध्यम से read_csv या read_html कंस्ट्रक्टर में पंक्ति सूचकांक निर्दिष्ट कर सकते हैं headerजो प्रतिनिधित्व करता है Row number(s) to use as the column names, and the start of the data। यह पूर्ववर्ती सभी पंक्तियों को स्वचालित रूप से छोड़ने का लाभ है जो माना जाता है कि रद्दी हैं।

import pandas as pd
from io import StringIO

In[1]
    csv = '''junk1, junk2, junk3, junk4, junk5
    junk1, junk2, junk3, junk4, junk5
    pears, apples, lemons, plums, other
    40, 50, 61, 72, 85
    '''

    df = pd.read_csv(StringIO(csv), header=2)
    print(df)

Out[1]
       pears   apples   lemons   plums   other
    0     40       50       61      72      85
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.