【发布时间】:2018-04-24 04:35:38
【问题描述】:
我想在 pandas 数据框中设置一个单元格,该单元格等于一个字典,其中同一行中的另一列等于 1。我正在使用 df.loc 过滤行。因为我的字典有两个键,所以它只有在df.loc 完成的过滤也有两个键时才有效。如果它没有两个键,我会得到ValueError: Must have equal len keys and value when setting with an iterable。
我不明白为什么这两件事是相关的。
import pandas as pd
df = pd.DataFrame(data=[[1,2], [0,3], [3,4]], columns=['Col1', 'Col2'])
#df = pd.DataFrame(data=[[1,2], [1,3], [3,4]], columns=['Col1', 'Col2'])
df.loc[df["Col1"]==1, "Col2"] = {'key1': 'A',
'key2': 'B'}
print df
如果我取消注释第三行代码,我想产生以下结果。
Col1 Col2
0 1 {u'key2': u'B', u'key1': u'A'}
1 1 {u'key2': u'B', u'key1': u'A'}
2 3 4
在它被标记为重复之前,我已经看到了关于这个 pandas 错误的其他问题,但似乎没有一个专门解决这个问题。
【问题讨论】:
-
当心!您正在复制引用,因此如果您修改一个,则修改所有副本!
-
@coldspeed。没事儿。实际上只有一个
df。我的意思是如果我取消注释第二个,那么第一个将被评论。 -
如果您取消注释第三行代码,我不明白为什么您希望获得该输出。在那种情况下,为什么
df.Col1[1]会等于1? -
@andrew_reece 我很抱歉。我修复的代码中有一些拼写错误
-
当我在 Python 2.7.12 上运行你的代码时,它给出了预期的输出而没有错误。
标签: python pandas dataframe dictionary