【问题标题】:Pandas loc error: 'Series' objects are mutable, thus they cannot be hashedPandas loc 错误:“系列”对象是可变的,因此它们不能被散列
【发布时间】:2021-01-26 00:35:26
【问题描述】:

我需要一些帮助来解决处理 pandas DataFrame 的问题。这是代码:

df.drop(df.index[0], inplace=True)
df.columns = ['Mic. No.', 'X', 'Y', 'Z', 'Re. Pre.', 'Im. Pre.']
df['Pre'] = df['Re. Pre.'] + df['Im. Pre.'] * 1j
df.drop(['Mic. No.', 'Re. Pre.', 'Im. Pre.'], axis=1, inplace=True)

if z != 0:
   df = df.loc(df['Z'] == z)

我在熊猫数据框中加载了一个 excel 表。现在经过一些预处理后,DataFrame 的格式如下:

          X         Y     Z                       Pre
  1      0.16      0.16  0.05   (1.0048704-0.51310315j)
  2      0.16     -0.16  0.05   (0.24814222-1.6094971j)
  3     -0.16      0.16  0.05   (0.24815122-1.6094059j)
  4     -0.16     -0.16  0.05   (1.0048704-0.51310315j)
  5 -0.154993  0.154993  0.05  (-0.13939651-1.7231593j)

现在我想删除 DataFrame 中“Z”列中没有值 z 的所有列。我收到错误消息:“TypeError:'Series' 对象是可变的,因此它们不能被散列”。我不知道该怎么做,因为我看到它与 pandas 文档中的完全一样。 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.loc.html

df.loc[df['shield'] > 6]
               max_speed  shield
 sidewinder          7       8

【问题讨论】:

  • 我有一个解决方案:df = df[df['Z'] == z] 但是有人能解释一下为什么其他方式行不通吗?
  • 对不起,我的回答不是你需要的?
  • 是的!但正如我所说,我得到了一个解决方案,从这一点开始,我对我的第一次尝试没有奏效的共振更感兴趣。
  • Samuel,我也遇到了同样的错误,这似乎不直观。问题是您的初始代码创建了循环引用,更改了影响选择的值。因此,正确的解决方案是先创建掩码,然后再应用更改。在此答案中查看更多详细信息:stackoverflow.com/a/49356823/10396469mask = df[df['feature']==0].index; df.loc[mask, 'feature'] = z

标签: python pandas dataframe typeerror pandas-loc


【解决方案1】:

您可以在df.loc 中使用方括号:

df = df.loc[df['Z'] == z]

【讨论】:

    【解决方案2】:

    你也可以用 lambda 表达式来做:

    df = df[lambda x: x['Z'] == z]
    

    【讨论】:

      猜你喜欢
      • 2021-03-12
      • 1970-01-01
      • 1970-01-01
      • 2021-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多