23

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は同じデータを含むが異なる名前の列です。理想的には、の名前を維持しながら、を構成fooする行を移動する方法はありますか?barbar

最終的に、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

4

5 に答える 5

23

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)
于 2014-05-21T15:38:41.700 に答える
22

これを試して:

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

そのデータを新しい列barにする場合は、結果をに割り当てるだけdf['bar']です。

于 2012-06-10T21:38:40.860 に答える
6

最近のパンダバージョン(少なくとも0.12以降)には、DataFrameオブジェクトとSeriesオブジェクトのcombine_first()およびメソッドがあります。update()たとえば、DataFrameが呼び出された場合、次のdfようにします。

df.bar.combine_first(df.foo)

これは、列のNan値をbar列に一致するように変更するだけで、インプレースで変更fooします。の非Nan値をの値で上書きするbarには、このメソッドfooを使用しますupdate()

于 2016-11-30T00:57:03.177 に答える
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
于 2016-04-28T16:51:04.890 に答える
2

これは、を使用して行うこともできますnumpy

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

于 2016-12-01T03:51:41.613 に答える