【问题标题】:How to set a numpy array in a pandas data frame cell?如何在熊猫数据框单元格中设置一个 numpy 数组?
【发布时间】:2021-08-08 13:01:17
【问题描述】:

我有一个熊猫数据框。我想用 numpy 数组填充一些单元格,但我得到以下 ValueError。

我不会在现实生活中填充零数组。 这是复制错误的简化示例代码

ValueError: 无法将输入数组从形状 (10,) 广播到形状 (1,)

import pandas as pd
import numpy as np

df = pd.DataFrame(columns=['name1','name2','array1','array2' ])
df = df.append({'name1': 'aaaa','name2': 'bbbb','array1':np.nan,'array2': np.nan}, ignore_index=True)
df = df.append({'name1': 'cccc','name2': 'dddd','array1':np.nan,'array2': np.nan}, ignore_index=True)

df.loc[((df['name1']=='aaaa') & (df['name2']=='bbbb')),'array1']=np.zeros((10,1))

print(df)

【问题讨论】:

    标签: python arrays pandas dataframe numpy


    【解决方案1】:

    一种解决方法是使用.map().loc 过滤单元格,如下所示:

    这很有效,因为.map() 致力于按元素进行转换,并且不会尝试将数组广播到整个系列。

    df.loc[((df['name1']=='aaaa') & (df['name2']=='bbbb')),'array1'] = df.loc[((df['name1']=='aaaa') & (df['name2']=='bbbb')),'array1'].map(lambda x: np.zeros((10,1)))
    
    
    print(df)
    
      name1 name2                                                                  array1 array2
    0  aaaa  bbbb  [[0.0], [0.0], [0.0], [0.0], [0.0], [0.0], [0.0], [0.0], [0.0], [0.0]]    NaN
    1  cccc  dddd                                                                     NaN    NaN
    
    
    df.applymap(type)        #  to check the data type
    
               name1          name2                   array1           array2
    0  <class 'str'>  <class 'str'>  <class 'numpy.ndarray'>  <class 'float'>
    1  <class 'str'>  <class 'str'>          <class 'float'>  <class 'float'>
    

    【讨论】:

    • 对不起,我还没有测试。但是对任何形状的数组都有效吗?
    • @burcak 是的,对数组形状没有限制。
    • 我同时测试过。谢谢。
    猜你喜欢
    • 2016-04-20
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 2022-01-12
    • 2020-10-17
    • 2014-12-26
    • 2019-02-13
    • 1970-01-01
    相关资源
    最近更新 更多