这是一个示例数据
import pandas as pd
cols = ['Country','Name','SomeNumber','SomeDate']
sourceData = [('WI','Vivian',34,'#1985-01-01#'),
('IND','Sam',56,'#1988-02-01#'),
('NZ','Richard',324,'#1987-07-01#'),
('AUS','Don',98,'#1998-07-12#'),
('SL','Simth',101,'#2001-07-12#'),]
x = pd.DataFrame(sourceData,columns=cols)
x
Country Name SomeNumber SomeDate
0 WI Vivian 34 #1985-01-01#
1 IND Sam 56 #1988-02-01#
2 NZ Richard 324 #1987-07-01#
3 AUS Don 98 #1998-07-12#
4 SL Simth 101 #2001-07-12#
我想做的是,更新每一列,表中缺少值的每个值,“名称”列除外
现在,更新数据框应该如下所示:
Country Name SomeNumber SomeDate
0 MISSING Vivian MISSING MISSING
1 MISSING Sam MISSING MISSING
2 MISSING Richard MISSING MISSING
3 MISSING Don MISSING MISSING
4 MISSING Simth MISSING MISSING
请注意,考虑到在现实世界中我有 114 列,我不想做这样的事情:
x['Country'] = 'MISSING'
x['SomeNumber'] = 'MISSING'
x['SomeDate'] = 'MISSING'
我试过这个:
cols.remove('Name')
x[cols] = 'MISSING"
但它给了我以下警告,我想避免:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#inde
xing-view-versus-copy
inTardisMissingInSource[cols] = 'MISSING'
C:\tardis\desktop\environment\python\lib\site-packages\pandas\core\indexing.py:477: SettingWithCopyW
arning:
最佳答案
SettingWithCopyWarning
很好地表明您在错误的地方使用了 bool 索引。您应该改为使用 df.loc
,如下所示:
In [1430]: x.loc[:, x.columns.difference(['Name'])] = 'MISSING'
In [1431]: x
Out[1431]:
Country Name SomeNumber SomeDate
0 MISSING Vivian MISSING MISSING
1 MISSING Sam MISSING MISSING
2 MISSING Richard MISSING MISSING
3 MISSING Don MISSING MISSING
4 MISSING Simth MISSING MISSING
主要部分是 x.columns.difference([...])
。传入要排除的列标题列表,这些列将不会被选取用于分配。
请注意,这种混合赋值会改变行的dtype
,请谨慎使用。
如果你不想就地赋值,你可以通过解压一个字典来使用df.assign
:
In [1435]: x.assign(**{ k : 'MISSING' for k in x.columns.difference(['Name'])})
Out[1435]:
Country Name SomeNumber SomeDate
0 MISSING Vivian MISSING MISSING
1 MISSING Sam MISSING MISSING
2 MISSING Richard MISSING MISSING
3 MISSING Don MISSING MISSING
4 MISSING Simth MISSING MISSING
关于python - 使用单个值重新分配多个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45883600/