【问题标题】:cannot set pandas column values using series, sets everything to np.nan instead无法使用系列设置熊猫列值,而是将所有内容设置为 np.nan
【发布时间】:2020-08-23 22:00:10
【问题描述】:

我有以下 pandas (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

在使用这种分配技术之前,我已经多次设置数据框列值,为什么这不起作用(不再)?

【问题讨论】:

    标签: python pandas dataframe indexing nan


    【解决方案1】:

    问题在于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
    

    【讨论】:

      【解决方案2】:

      重症监护室:

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

      df.assign(y=s.values)
      

      【讨论】:

        猜你喜欢
        • 2021-12-07
        • 2019-03-04
        • 2012-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-18
        • 2018-06-21
        • 2020-12-28
        相关资源
        最近更新 更多