2012-06-10 27 views
19

में दो कॉलम गठबंधन मैं एक पांडा DataFrame है कि यह में एकाधिक स्तंभों है है:पांडा: एक DataFrame

Index: 239897 entries, 2012-05-11 15:20:00 to 2012-06-02 23:44:51 
Data columns: 
foo     11516 non-null values 
bar     228381 non-null values 
Time_UTC    239897 non-null values 
dtstamp    239897 non-null values 
dtypes: float64(4), object(1) 

जहां foo और bar कॉलम जो अभी तक एक ही डेटा होते हैं अलग नाम कर रहे हैं। क्या foobar में पंक्तियों को स्थानांतरित करने का कोई तरीका है, आदर्श रूप से bar का नाम बनाए रखने के दौरान?

अंत में DataFrame दिखाई देनी चाहिए के रूप में:

Index: 239897 entries, 2012-05-11 15:20:00 to 2012-06-02 23:44:51 
Data columns: 
bar     239897 non-null values 
Time_UTC    239897 non-null values 
dtstamp    239897 non-null values 
dtypes: float64(4), object(1) 

NaN मानों बार बना हुआ है यही कारण है कि foo से मान लिखे थे।

pandas.concat([df['foo'].dropna(), df['bar'].dropna()]).reindex_like(df) 

: उस डेटा को नया स्तंभ bar बनना चाहते हैं, तो बस df['bar'] के परिणाम में निर्दिष्ट करें:

उत्तर

21

इस प्रयास करें।

+0

मैं नहीं दिखाई दे रहा 'पांडा नाम स्थान में एक समारोह के रूप concat'; मुझे यकीन नहीं है कि मैं क्या खो रहा हूं। – BFTM

+0

आपके पास पांडा का कौन सा संस्करण है? फ़ंक्शन को यहां दस्तावेज़ित किया गया है: http://pandas.pydata.org/pandas-docs/stable/merging.html#concatenating-objects – BrenBarn

+0

मैं पांडास ver 0.6.1 चला रहा था जिसमें कॉन्सट फ़ंक्शन शामिल नहीं था। V 0.7.3 में अपग्रेड नामस्थान में समेकित लाता है। एक जादू की तरह काम करता है! धन्यवाद। – BFTM

21

आप सीधे fillna और उपयोग कर सकते हैं स्तंभ 'बार'

df['bar'].fillna(df['foo'], inplace=True) 
del df['foo'] 

सामान्य उदाहरण के लिए परिणाम बताए:

import pandas as pd 
#creating the table with two missing values 
df1 = pd.DataFrame({'a':[1,2],'b':[3,4]}, index = [1,2]) 
df2 = pd.DataFrame({'b':[5,6]}, index = [3,4]) 
dftot = pd.concat((df1, df2)) 
print dftot 
#creating the dataframe to fill the missing values 
filldf = pd.DataFrame({'a':[7,7,7,7]}) 

#filling 
print dftot.fillna(filldf) 
+0

लेकिन ध्यान दें कि filldf को अनुक्रमित किया गया है 0..3 जबकि dftot अनुक्रमित है 1..4, dftot.fillna (filldf) ['a'] [4] नैन होगा। 7.0 –

5

एक अन्य विकल्प के फ्रेम पर .apply() विधि का उपयोग करें। आप मौजूदा डेटा के सम्मान के साथ एक स्तंभ पुन: असाइन कर सकते हैं ...

import pandas as pd 
import numpy as np 

# get your data into a dataframe 

# replace content in "bar" with "foo" if "bar" is null 
df["bar"] = df.apply(lambda row: row["foo"] if row["bar"] == np.NaN else row["bar"], axis=1) 

# note: change 'np.NaN' with null values you have like an empty string 
+0

पकड़ @ विनीट के लिए धन्यवाद नहीं – openwonk

3

अधिक आधुनिक पांडा संस्करणों (कम से कम 0.12 के बाद से) DataFrame और सीरीज वस्तुओं के लिए combine_first() and update() तरीकों की है। उदाहरण के लिए यदि आपके DataFrame df कहा जाता था, आप क्या करेंगे:

df.bar.combine_first(df.foo) 

जो केवल bar स्तंभ foo स्तंभ से मेल करने के नेन मूल्यों को बदल देगा, और इसलिए inplace करना होगा। foo में bar में गैर-नैन मानों को ओवरराइट करने के लिए, आप update() विधि का उपयोग करेंगे।

2

आप इसे numpy का उपयोग करके भी कर सकते हैं।

df['bar'] = np.where(pd.isnull(df['bar']),df['foo'],df['bar'])

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