Pandas Dataframe:如何使用列中的值之一填充对象类型?

时间:2018-05-31 04:51:52

标签: python pandas dataframe

例如,我有一个df。

data = {'product': ['coca', np.nan, 'pepsi', 'pepsi', 'orange',], 
    'price': [25, 94, 57, 62, 70,],
    'company':[np.nan,'coca-cola',np.nan,np.nan,np.nan,]}
df = pd.DataFrame(data)

OUT:

 company  price product
0        NaN     25    coca
1  coca-cola     94     NaN
2        NaN     57   pepsi
3        NaN     62   pepsi
4        NaN     70  orange

我想在对应的列中用值填充对象类型。

预期输出:

df
      company  price product
0  coca-cola     25    coca
1  coca-cola     94    coca
2  coca-cola     57   pepsi
3  coca-cola     62   pepsi
4  coca-cola     70  orange

我尝试如下。

for col in df:
    #get dtype for column
    dt = df[col].dtype 
    #check if it is a number
    if dt == int or dt == float:
        pass
    else:
        df[col].fillna(df[col][0])

但是df[col][0]可能是Nan,所以我应该填写一个不是nan的值。 那怎么办呢?

2 个答案:

答案 0 :(得分:0)

试试这个:

for i in range(0,df.company.count()):
    if((df.company[i].isnull()==True)&(df.product[i].isnull()==False))
    df.company[i]=df.product[i]
    if((df.company[i].isnull()==False)&(df.product[i].isnull()==True))
    df.product[i]=df.company[i]

或者你可以试试这个:

df['product'] = df['product'].fillna(df['company'])
df['company'] = df['company'].fillna(df['product'])

答案 1 :(得分:0)

只需使用 ffill bfill

df.ffill().bfill()

  product  price    company
0    coca     25  coca-cola
1    coca     94  coca-cola
2   pepsi     57  coca-cola
3   pepsi     62  coca-cola
4  orange     70  coca-cola