Python 替换dataframe列中的前n个元素

Python 替换dataframe列中的前n个元素,python,pandas,Python,Pandas,我想用我保存的另一个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

我想用我保存的另一个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.系列(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)
只需使用:

你会得到:

        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

“每当我尝试这样做,它都不会起作用。”你得到了什么错误或结果?@Evan我没有得到错误。它只是不会插补元素。我得到了
ValueError:当使用iterable设置时,len键和值必须相等
是否复制了我的代码?有最新的熊猫版本吗?
        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