使用数据框时,通常需要调整各个数据框的内容细胞。在本例中,任务是将特定列表“abc”插入数据帧的单元格 1B 中。我们进行了各种尝试,但每种尝试都遇到了自己的挑战。
最初,尝试使用 df.ix[1,'B'] = abc 将整个列表直接分配给单元格导致了 ValueError由于键和值的数量不匹配。使用 df.ix[1,'B'] = [abc] 会创建一个以 'abc' 列表作为其唯一元素的列表,这是不需要的。
使用 df 将列表转换为字符串。 ix[1,'B'] = ', '.join(abc) 将预期内容生成为字符串而不是列表。类似地,使用 df.ix[1,'B'] = [', '.join(abc)] 创建一个包含单个字符串元素的列表。
随后尝试将列表插入到更复杂的数据帧中涉及整数和字符串的列类型遇到错误。这表明问题在于列的混合数据类型。
要解决此问题,建议使用 at 属性而不是 loc。此方法始终引用单个值,避免了 loc 遇到的问题。此外,确保插入的列具有 dtype=object 可以防止进一步的错误。
例如,以下代码成功将“abc”列表插入 df2 数据帧的单元格 1B 中:
import pandas as pd abc = ['foo', 'bar'] df2 = pd.DataFrame(data={'A': [12, 23], 'B': [None, None], 'C': ['bla', 'bla bla']}) df2['B'] = df2['B'].astype('object') # Ensure 'B' has dtype=object df2.at[1, 'B'] = abc print(df2)
输出:
A B C 0 12 NaN bla 1 23 [foo, bar] bla bla
以上是如何有效地将列表插入 Pandas DataFrame 的特定单元格中?的详细内容。更多信息请关注PHP中文网其他相关文章!