在Pandas列中替换所有值,无需条件

9
我有一个Pandas数据帧,其中有一个列满是我想要替换为另一个非条件值的值。
对于这个问题,假设我不知道这个列有多长,也不想迭代它的值。
使用.replace()是不合适的,因为我不知道该列中有哪些值:我想替换所有的值,而不考虑条件。
使用df.loc[<行选择>, <列选择>]也不适用,因为没有行选择逻辑:我需要所有的行,并且仅写True(如data.loc[True,'ColumnName'] = new_value)会返回KeyError(True,)。我尝试了data.loc[1,'ColumnName'] = new_value,它可以工作,但看起来真的很糟糕。
如果我知道data['ColumnName']的len(),那么我可以创建一个大小与之相等的数组,填充我的new_value,并简单地用该数组替换该列。这样做比需要1行代码的条件替换还要复杂,代码需要10行:这也不可取。
如何用1行告诉Pandas:ColumnName中的所有值现在都是new_value?我拒绝相信没有办法告诉Pandas不用再折腾我了。

1
data['ColumnName'] = new_value? -> data['列名'] = 新值 - Vishnu Kunchur
1
你在什么样的环境中工作?那是一个奇怪的语法错误,@VishnuKunchur的答案正是解决它的方法。 - DSM
啊啊啊啊,原来是环境的问题,他说得对。我真的不明白为什么有时候它会拒绝运行完全正常的代码!感谢你的帮助! - Saturnix
1
使用Jupyter Notebook测试和记录您的代码,然后再将所有这些部分组合到生产中。 - yoonghm
是的,我以为即时窗口和笔记本一样好用,但显然不是这样。完全正常的代码会出错,所以我认为是Pandas拒绝运行它。现在会坚持使用笔记本了,谢谢! - Saturnix
显示剩余4条评论
2个回答

15

正如我在评论中解释的那样,您不需要创建一个数组。 假设您有df

  InvoiceNO Month  Year Size
0         1     1     2    7
1         2     1     2    8
2         3     2     2   11
3         4     3     2    9
4         5     7     2  8.5

..并且您希望将InvoiceNO中的所有值更改为1234

df['InvoiceNO'] = 1234

输出:

   InvoiceNO Month  Year Size
0       1234     1     2    7
1       1234     1     2    8
2       1234     2     2   11
3       1234     3     2    9
4       1234     7     2  8.5

1
import pandas as pd

df = pd.DataFrame(
   {'num1'        : [3, 5, 9, 9, 14, 1],
    'num2'        : [3, 5, 9, 9, 14, 1]},
     index=[0, 1, 2, 3, 4, 5])
print(df)
print('\n')
df['num1'] = 100
print(df)
df['num1'] = 'Hi'
print('\n')
print(df)

输出是。
  num1  num2
0     3     3
1     5     5
2     9     9
3     9     9
4    14    14
5     1     1


   num1  num2
0   100     3
1   100     5
2   100     9
3   100     9
4   100    14
5   100     1


  num1  num2
0   Hi     3
1   Hi     5
2   Hi     9
3   Hi     9
4   Hi    14
5   Hi     1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接