2014-04-21 20 views
9

मेरे पास dataframe है जो बाहरी स्रोत (सीएसवी फ़ाइल) से कई कॉलम (≈30) के साथ है लेकिन उनमें से कई के पास कोई मूल्य या हमेशा समान नहीं है। इस प्रकार, मैं प्रत्येक कॉलम के लिए value_counts जल्दी से देखना चाहता हूं, मैं यह कैसे कर सकता हूं?प्रत्येक कॉलम पर लागू पांडा मूल्य_counts

उदाहरण के लिए

Id, temp, name 
1 34, null, mark 
2 22, null, mark 
3 34, null, mark 

मुझे एक वस्तु करते हुए कहा कि

  • ईद वापसी होगी: 34 -> 2, 22 -> 1
  • अस्थायी: अशक्त -> 3
  • नाम : मार्क -> 3

तो मुझे पता चलेगा कि अस्थायी है अप्रासंगिक और नाम दिलचस्प (हमेशा एक ही)

+0

लूप स्तंभों पर और प्रत्येक के लिए एक 'value_counts' प्रिंट ? – joris

+0

क्या @ जॉरीस ने कहा। एक [मुद्दा] है (https://github.com/pydata/pandas/pull/5381) डेटाफ्रेम पर 'value_counts' विधि जोड़ने के लिए, लेकिन इंडेक्स संरेखण के साथ कुछ समस्याएं हैं। – TomAugspurger

उत्तर

9

dataframe के लिए नहीं है,

df = pd.DataFrame(data=[[34, 'null', 'mark'], [22, 'null', 'mark'], [34, 'null', 'mark']], columns=['id', 'temp', 'name'], index=[1, 2, 3]) 

निम्नलिखित कोड

for c in df.columns: 
    print "---- %s ---" % c 
    print df[c].value_counts() 

निम्न परिणाम का उत्पादन करेगा:

---- id --- 
34 2 
22 1 
dtype: int64 
---- temp --- 
null 3 
dtype: int64 
---- name --- 
mark 3 
dtype: int64 
+0

आपकी टिप्पणियों और उत्तर के लिए धन्यवाद। मैंने सोचा कि बिना लूप के इसे करना संभव था लेकिन ऐसा लगता है कि यह नहीं है। (और हाँ मैंने उल्लिखित मुद्दे को देखा है, उम्मीद है कि यह जल्द ही संभव होगा :))। – Edouard

+0

दरअसल, इसे मानचित्र के साथ क्यों न करें: मानचित्र (लैम्ब्डा x: x.value_counts(), mdf.columns) – Edouard

3
आप

df.apply का उपयोग कर सकते हैं जो प्रदान किए गए फ़ंक्शन के साथ प्रत्येक कॉलम लागू करेगा, इस मामले में गिनती अनुपस्थित मान। यह

df.apply(lambda x: x.isnull().value_counts())

1

ऐसा करने से एक श्रृंखला में अच्छी तरह से FORMATTER वापस जाने के लिए एक अच्छा तरीका pandas.Series.value_counts और pandas.DataFrame.stack संयोजन है कि यह दिखता है।

DataFrame

df = pandas.DataFrame(data=[[34, 'null', 'mark'], [22, 'null', 'mark'], [34, 'null', 'mark']], columns=['id', 'temp', 'name'], index=[1, 2, 3]) 
कुछ

आप क्या कर सकते हैं, जैसे

df.apply(lambda x: x.value_counts()).T.stack() 

इस कोड में df.apply(lambda x: x.value_counts()) के लिए प्रत्येक स्तंभ पर लागू होता है value_counts और जिसके परिणामस्वरूप DataFrame करने के लिए इसे जोड़ देती है, ताकि आप एक साथ खत्म प्रत्येक कॉलम में प्रत्येक कॉलम के लिए DataFrame प्रत्येक कॉलम में प्रत्येक अलग-अलग मान के प्रति एक पंक्ति और एक पंक्ति (और प्रत्येक कॉलम में दिखाई देने वाले प्रत्येक मान के लिए null का एक पंक्ति)।

उसके बाद, T transposes DataFrame (ताकि आप एक सूचकांक कॉलम और कॉलम संभावित मान के बराबर करने के लिए बराबर के साथ एक DataFrame अंत), और stack के एक नए स्तर में DataFrame के कॉलम बदल जाता है मल्टीइंडेक्स और सभी Null मानों को "हटा देता है", पूरी चीज को Series बनाते हैं।

इसी का परिणाम

id 22  1 
     34  2 
temp null 3 
name mark 3 
dtype: float64 
0

कोड निम्नलिखित

df = pd.DataFrame(data=[[34, 'null', 'mark'], [22, 'null', 'mark'], [34, 'null', 'mark']], columns=["id", 'temp', 'name'], index=[1, 2, 3]) 
result2 = df.apply(pd.value_counts) 
result2 

तरह का उत्पादन करेगा है:

enter image description here

संबंधित मुद्दे