簡體   English   中英

替換pandas數據框列中的前n個元素

[英]Replace first n elements in pandas dataframe column

我想用我保存的另一個pd.series替換數據框中列的前n元素。 舉個例子

        category   price    store  testscore
0       Cleaning   11.42  Walmart        NaN
1       Cleaning   23.50      Dia        NaN
2  Entertainment   19.99  Walmart        NaN
3  Entertainment   15.95     Fnac        NaN
4           Tech   55.75      Dia        NaN
5           Tech  111.55  Walmart        NaN

在這里,我想用一組新的字符串替換testscore中的前三個NaN。

假設我有一個變量:

cats = pd.Series(df['category'][0:2])

所以我可以將其放在testscore列中嗎?

        category   price    store      testscore
0       Cleaning   11.42  Walmart       Cleaning
1       Cleaning   23.50      Dia       Cleaning
2  Entertainment   19.99  Walmart  Entertainment
3  Entertainment   15.95     Fnac            NaN
4           Tech   55.75      Dia            NaN
5           Tech  111.55  Walmart            NaN

但是,每當我嘗試執行此操作時,它將無法正常工作。

創建此偽數據集的代碼:

import pandas as pd
import numpy as np

df = pd.DataFrame({'category': ['Cleaning', 'Cleaning', 'Entertainment', 'Entertainment', 'Tech', 'Tech'],
                        'store': ['Walmart', 'Dia', 'Walmart', 'Fnac', 'Dia','Walmart'],
                        'price':[11.42, 23.50, 19.99, 15.95, 55.75, 111.55],
                        'testscore': [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan]})

print(df)

df2 = pd.DataFrame({'category': ['Cleaning', 'Cleaning', 'Entertainment', 'Entertainment', 'Tech', 'Tech'],
                        'store': ['Walmart', 'Dia', 'Walmart', 'Fnac', 'Dia','Walmart'],
                        'price':[11.42, 23.50, 19.99, 15.95, 55.75, 111.55],
                        'testscore': ['Cleaning', 'Cleaning', 'Entertainment', np.nan, np.nan, np.nan]})

print(df2)

只需使用df.loc

import pandas as pd
import numpy as np

df = pd.DataFrame({'category': ['Cleaning', 'Cleaning', 'Entertainment', 'Entertainment', 'Tech', 'Tech'],
                        'store': ['Walmart', 'Dia', 'Walmart', 'Fnac', 'Dia','Walmart'],
                        'price':[11.42, 23.50, 19.99, 15.95, 55.75, 111.55],
                        'testscore': [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan]})


cats = pd.Series(df['category'][:3]) # 3 elements

df.loc[:3,'testscore'] = cats # Assign first 3

print(df)

你會得到:

        category   price    store      testscore
0       Cleaning   11.42  Walmart       Cleaning
1       Cleaning   23.50      Dia       Cleaning
2  Entertainment   19.99  Walmart  Entertainment
3  Entertainment   15.95     Fnac            NaN
4           Tech   55.75      Dia            NaN
5           Tech  111.55  Walmart            NaN

fillna與參數limit一起使用:

df['testscore'] = df.testscore.fillna(df.category, limit=3)
df 

輸出:

        category   price    store      testscore
0       Cleaning   11.42  Walmart       Cleaning
1       Cleaning   23.50      Dia       Cleaning
2  Entertainment   19.99  Walmart  Entertainment
3  Entertainment   15.95     Fnac            NaN
4           Tech   55.75      Dia            NaN
5           Tech  111.55  Walmart            NaN

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM