无法使用系列设置熊猫列值,而是将所有内容都设置为np.nan

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法使用系列设置熊猫列值,而是将所有内容都设置为np.nan相关的知识,希望对你有一定的参考价值。

我有以下熊猫(pd)数据框:

> df = pd.DataFrame({'x':[1,2,3], 'y':[4,5,6], 'z':[7,8,9]}, index=['one', 'two', 'three'])
> df
       x  y  z
one    1  4  7
two    2  5  8
three  3  6  9

和系列:

s = pd.Series([99,99,99])

[当我尝试将b中的这些值分配给df中的某个列时,我没有收到任何错误,但是该列中的所有值均设置为nan

> df['y'] = s
> df
       x   y  z
one    1 NaN  7
two    2 NaN  8
three  3 NaN  9

在使用这种赋值技术之前,我已经多次设置了数据框列值,为什么这行不通了?

答案

问题出在DataFrameSeries中的索引值:它们不匹配。默认情况下,任何pandas索引都具有从0开始计数的整数值,因此,如果您不对其进行修改并且列的长度与Series匹配,则没有问题。

但是,您修改了df的索引值并将其设置为['one', 'two', 'three']。您应确保:

  • Series都使用与DataFrame相同的索引:

    > s = pd.Series({'one': 99, 'two': 99, 'three': 99})
    > df['y'] = s
    
  • 或者,您可以只使用s中的(无索引)值:

    > df['y'] = s.values
    

获得:

> df
       x   y  z
one    1  99  7
two    2  99  8
three  3  99  9
另一答案

ICCU:

另一种方法。请尝试df.assign

df.assign(y=s.values)

enter image description here

以上是关于无法使用系列设置熊猫列值,而是将所有内容都设置为np.nan的主要内容,如果未能解决你的问题,请参考以下文章

在熊猫数据框中将纪元列值转换为时间

如何将熊猫列的值设置为列表

将行恢复为默认列值mysql

熊猫迭代更新列值

MySQL将列值的所有值设置为0 exept id 4

将具有相同索引的熊猫系列列表转换为字典