df一列给另一df赋值后得到None

问题解决

有两个df1,df2,目的是把df1的列复制到df2,df2原本没有这一列,行数相等。

df2['WANTED'] = df1['WANTED']

结果发现df2确立有了这一列,但所有的值都是None,不是df1[‘WANTED’]的值。

查询原因是这种直接使用等号赋值的方式,只适用于df1和df2具有相同的index的情况下,其他情况会导致值为None。

使用insert可以解决这个问题:

df2.insert(df2.shape[1], 'WANTED', df1['WANTED'].values))

使用insert可以在df2的任意一列插入,这里是在最后一列插入数据。

使用df的一列为另一df新增一列的方式

至少有三种方式:

  • df2[‘new_col’] = df1[‘col’]
  • df2[‘new_col’] = df1.pop(‘col’)
  • df2.insert(idx, ‘new_col’, df1[‘col’].values)

其中,

  • 前两种方式必须保证两个 DataFrame 的 index 要相同,若不相同,则这一列对应的值为NaN,而且总是在末尾插入列
  • 方法三没有这个限制,可以放在任意列,也不要求 index 相同

关于insert,原型如下:

  • DataFrame.insert(loc, column, value, allow_duplicates=False)

其中:

  • loc: 参数column插入的位置,如果想插入到第一例则为0,取值范围: 0 <= loc <= len(columns),其中len(columns)为Dataframe的列数
  • column: 列名
  • value: 可以是整数,Series或者数组等
  • allow_duplicates: 是否允许重复列,默认False,如果插入的列已经存在,则抛出异常
小结

主要介绍了使用df列为df赋值的方式,重点是使用insert方法。

对于简单且可靠的操作,使用直接赋值更简便。

### 回答1: 可以使用`loc`方法根据一列的值对另一列进行赋值。例如,假设我们有一个DataFrame `df`,其中有两列`A`和`B`,我们想要根据`A`列的值来更新`B`列的值,可以按照以下方式实现: ``` python import pandas as pd # 创建DataFrame df = pd.DataFrame({'A': [1, 2, 3, 4], 'B': [5, 6, 7, 8]}) # 根据A列的值对B列进行赋值 df.loc[df['A'] == 2, 'B'] = 10 # 打印DataFrame print(df) ``` 这将会输出以下结果: ``` A B 0 1 5 1 2 10 2 3 7 3 4 8 ``` 在上面的示例中,我们使用了`loc`方法来选择`df`中`A`列的值为2的行,并将其`B`列的值更新为10。 ### 回答2: 在使用pandas对一列进行赋值时,可以使用`loc`方法或者`[]`操作符来实现。 1. 使用`loc`方法: ```python import pandas as pd # 创建一个示例DataFrame df = pd.DataFrame({'A': [1, 2, 3, 4, 5]}) # 根据列'A'的值对列'B'赋值为2倍的值 df.loc[df['A'] > 2, 'B'] = df['A'] * 2 # 输出结果 print(df) ``` 运行结果: ``` A B 0 1 NaN 1 2 NaN 2 3 6.0 3 4 8.0 4 5 10.0 ``` 2. 使用`[]`操作符: ```python import pandas as pd # 创建一个示例DataFrame df = pd.DataFrame({'A': [1, 2, 3, 4, 5]}) # 根据列'A'的值对列'B'赋值为2倍的值 df['B'] = df['A'].apply(lambda x: x * 2 if x > 2 else None) # 输出结果 print(df) ``` 运行结果: ``` A B 0 1 NaN 1 2 NaN 2 3 6.0 3 4 8.0 4 5 10.0 ``` 以上两种方法都可以根据条件将一列的值赋值给另一列。根据具体的需求,可以选择更适合自己的方式进行操作。 ### 回答3: pandas 是一个开源的Python库,用于数据分析和数据处理。它提供了一个灵活且高效的数据结构,被广泛应用于数据清洗、数据转换和数据分析等各个领域。 当我们需要根据一列的数值对另一列进行赋值时,可以使用pandas的赋值操作符`=`和索引的方式实现。 例如,我们有一个包含学生姓名和对应成绩的DataFrame,我们需要根据学生成绩判断其等级,并将等级赋值到另一列: ```python import pandas as pd # 创建一个DataFrame data = {'姓名': ['小明', '小刚', '小红', '小李'], '成绩': [85, 76, 92, 88]} df = pd.DataFrame(data) # 根据成绩判断等级 df['等级'] = '' # 先创建一个空列,存储等级 # 使用索引和条件判断来对等级列赋值 df['等级'][df['成绩'] >= 90] = '优秀' df['等级'][(df['成绩'] >= 80) & (df['成绩'] < 90)] = '良好' df['等级'][df['成绩'] < 80] = '一般' # 输出DataFrame print(df) ``` 以上代码中,我们首先创建了一个DataFrame,包括姓名和成绩两列。然后使用`df['等级'] = ''`创建一个空列,用于存储等级。接着使用索引和条件判断的方式,根据成绩的不同范围对等级列进行赋值。最后输出DataFrame,查看修改后的结果。 通过以上操作,我们成功根据一列的数值对另一列进行了赋值。当然,我们也可以根据自己的需求,使用其他方式来判断并赋值。pandas提供了丰富的函数和方法,可以满足不同场景下的操作需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值