我已经创建了一个熊猫数据框架
df = DataFrame(index=['A','B','C'], columns=['x','y'])
得到了这个
x y
A NaN NaN
B NaN NaN
C NaN NaN
现在,我想给特定的单元格赋值,例如给C行和x列赋值。
我希望得到这样的结果:
x y
A NaN NaN
B NaN NaN
C 10 NaN
下面的代码:
df.xs('C')['x'] = 10
但是df的内容没有改变。数据帧仍然只包含nan。
有什么建议吗?
已弃用Set_value()。
从0.23.4版本开始,Pandas“宣布了未来”…
>>> df
Cars Prices (U$)
0 Audi TT 120.0
1 Lamborghini Aventador 245.0
2 Chevrolet Malibu 190.0
>>> df.set_value(2, 'Prices (U$)', 240.0)
__main__:1: FutureWarning: set_value is deprecated and will be removed in a future release.
Please use .at[] or .iat[] accessors instead
Cars Prices (U$)
0 Audi TT 120.0
1 Lamborghini Aventador 245.0
2 Chevrolet Malibu 240.0
考虑到这些建议,以下是如何使用它们的演示:
按行/列整数位置
>>> df.iat[1, 1] = 260.0
>>> df
Cars Prices (U$)
0 Audi TT 120.0
1 Lamborghini Aventador 260.0
2 Chevrolet Malibu 240.0
通过行/列标签
>>> df.at[2, "Cars"] = "Chevrolet Corvette"
>>> df
Cars Prices (U$)
0 Audi TT 120.0
1 Lamborghini Aventador 260.0
2 Chevrolet Corvette 240.0
引用:
pandas.DataFrame.iat
pandas.DataFrame.at
使用index with condition的一种方法是首先获取满足条件的所有行的索引,然后简单地以多种方式使用这些行索引
conditional_index = df.loc[ df['col name'] <condition> ].index
示例条件如下
==5, >10 , =="Any string", >= DateTime
然后您可以以各种方式使用这些行索引,例如
替换conditional_index的一列值
df.loc[conditional_index , [col name]]= <new value>
替换conditional_index的多列值
df.loc[conditional_index, [col1,col2]]= <new value>
保存conditional_index的一个好处是,您可以将一个列的值分配给具有相同行索引的另一个列
df.loc[conditional_index, [col1,col2]]= df.loc[conditional_index,'col name']
这一切都是可能的,因为.index返回一个索引数组,.loc可以直接寻址,这样就避免了一次又一次的遍历。
.iat /。是很好的解决办法。
假设你有这样一个简单的数据帧:
A B C
0 1 8 4
1 3 9 6
2 22 33 52
如果我们想修改单元格[0,"A"]的值,你可以使用这些解决方案之一:
df。Iat [0,0] = 2
df。at[0,'A'] = 2
下面是一个如何使用iat获取和设置cell值的完整示例:
def prepossessing(df):
for index in range(0,len(df)):
df.iat[index,0] = df.iat[index,0] * 2
return df
Y_train前:
0
0 54
1 15
2 15
3 8
4 31
5 63
6 11
Y_train调用prepossession函数后,iat改变每个单元格的值乘以2:
0
0 108
1 30
2 30
3 16
4 62
5 126
6 22