Dataframe:无法在DF中替换其他元素

时间:2017-10-27 13:19:22

标签: python pandas dataframe

我使用read_csv导入了数据,并且有一个名为 praw 的DataFrame。它有几列,如'TIME','COUNTRY','PRODUCT'和'VALUE'。

我想将'PRODUCT'== product1的缺失数据替换为我对product2的数据,给定选定的年份和国家。

我使用以下代码

praw.loc[(praw['COUNTRY'] == country) & (praw['TIME'] == year) & 
(praw['PRODUCT'] == 'product1'),'Value'] = praw.loc[(praw['COUNTRY'] == country) & 
(praw['TIME'] == year) & (praw['PRODUCT'] == 'product2'),'Value']

如果我打印

praw.loc[(praw['COUNTRY'] == country) & 
(praw['TIME'] == year) & 
(praw['PRODUCT'] == 'product1'),'Value'] 

我还有NaN。我做错了什么?

我确信'product2'的值不会丢失:)

1 个答案:

答案 0 :(得分:1)

我认为您需要使用fillna values[0]替换第一个值m2条件:

m1 = (praw['COUNTRY'] == country) & (praw['TIME'] == year)& (praw['PRODUCT'] == 'product1')
m2 = (praw['COUNTRY'] == country) & (praw['TIME'] == year)& (praw['PRODUCT'] == 'product2')
praw.loc[m1,'Value'] = praw.loc[m1,'Value'].fillna(praw.loc[m2,'Value'].values[0])

样品:

praw = pd.DataFrame({'COUNTRY':list('aaadka'),
                   'TIME':[4,4,4,5,4,4],
                   'C':[7,8,9,4,2,3],
                   'D':[1,3,5,7,1,0],
                   'Value':[5,np.nan,np.nan,9,np.nan,0],
                   'PRODUCT':list('aaabbb')})

print (praw)
   C COUNTRY  D PRODUCT  TIME  Value
0  7       a  1       a     4    5.0
1  8       a  3       a     4    NaN
2  9       a  5       a     4    NaN
3  4       d  7       b     5    9.0
4  2       k  1       b     4    NaN
5  3       a  0       b     4    0.0
country = 'a'
year = 4
m1 = (praw['COUNTRY'] == country) & (praw['TIME'] == year)& (praw['PRODUCT'] == 'a')
m2 = (praw['COUNTRY'] == country) & (praw['TIME'] == year)& (praw['PRODUCT'] == 'b')
print (m1)
0     True
1     True
2     True
3    False
4    False
5    False
dtype: bool

print (m2)
0    False
1    False
2    False
3    False
4    False
5     True
dtype: bool

print (praw.loc[m2,'Value'].values[0])
0.0
praw.loc[m1,'Value'] = praw.loc[m1,'Value'].fillna(praw.loc[m2,'Value'].values[0])
print (praw)
   C COUNTRY  D PRODUCT  TIME  Value
0  7       a  1       a     4    5.0
1  8       a  3       a     4    0.0
2  9       a  5       a     4    0.0
3  4       d  7       b     5    9.0
4  2       k  1       b     4    NaN
5  3       a  0       b     4    0.0