pandas数据帧中的不可用类型错误

use*_*827 8 python pandas

我有这个人.熊猫数据帧:

df.shape

(86, 245)
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时:

df[0, :]
Run Code Online (Sandbox Code Playgroud)

我收到错误:

*** TypeError: unhashable type
Run Code Online (Sandbox Code Playgroud)

我该如何解决?我只想得到第一排

jez*_*ael 10

如果Series只需使用第一行DataFrame.iloc:

df.iloc[0, :]
Run Code Online (Sandbox Code Playgroud)

但如果需要DataFrame使用iloc但添加[]或使用head:

df.iloc[[0], :]
df.head(1)
Run Code Online (Sandbox Code Playgroud)

样品:

df = pd.DataFrame({'A':[1,2,3],
                   'B':[4,5,6],
                   'C':[7,8,9],
                   'D':[1,3,5],
                   'E':[5,3,6],
                   'F':[7,4,3]})

print (df)
   A  B  C  D  E  F
0  1  4  7  1  5  7
1  2  5  8  3  3  4
2  3  6  9  5  6  3

print (df.iloc[0, :])
A    1
B    4
C    7
D    1
E    5
F    7
Name: 0, dtype: int64

print (df.head(1))
   A  B  C  D  E  F
0  1  4  7  1  5  7

print (df.iloc[[0], :])
   A  B  C  D  E  F
0  1  4  7  1  5  7
Run Code Online (Sandbox Code Playgroud)


Ony*_*nyr 9

TypeError: unhashable type: 'Series在尝试使用.loc函数而不是ps.Dataframe.

我的错误是使用.locas.loc(...)当它应该是.loc[...]

错误示例:

import pandas as pd

df = pd.DataFrame({'A':[1,2,3],
                   'B':[4,5,6],
                   'C':[7,8,9],
                   'D':[1,3,5],
                   'E':[5,3,6],
                   'F':[7,4,3]})

print (df)

# typical mistake
print(df.loc(
    df["A"] == 1
))
Run Code Online (Sandbox Code Playgroud)

结果:

PS C:\Users\rascoussier\python\stackoverflow\type_error_with_df_loc> C:\Users\rascoussier\Anaconda3\envs\elastic-1\python.exe .\main.py                                 
   A  B  C  D  E  F
0  1  4  7  1  5  7
1  2  5  8  3  3  4
2  3  6  9  5  6  3
Traceback (most recent call last):
  File "C:\Users\rascoussier\python\stackoverflow\type_error_with_df_loc\main.py", line 12, in <module>
    print(df.loc(
  File "C:\Users\rascoussier\Anaconda3\envs\elastic-1\lib\site-packages\pandas\core\indexing.py", line 634, in __call__
    axis = self.obj._get_axis_number(axis)
  File "C:\Users\rascoussier\Anaconda3\envs\elastic-1\lib\site-packages\pandas\core\generic.py", line 550, in _get_axis_number
    return cls._AXIS_TO_AXIS_NUMBER[axis]
TypeError: unhashable type: 'Series'
Run Code Online (Sandbox Code Playgroud)

Pylance 在 VSCode 上未检测到此错误。我不知道为什么。但下面是更正。

import pandas as pd

df = pd.DataFrame({'A':[1,2,3],
                   'B':[4,5,6],
                   'C':[7,8,9],
                   'D':[1,3,5],
                   'E':[5,3,6],
                   'F':[7,4,3]})

print (df)

# correction
print("Correction works, see below: ")
print(df.loc[
    df["A"] == 1
])
Run Code Online (Sandbox Code Playgroud)

结果:

PS C:\Users\rascoussier\python\stackoverflow\type_error_with_df_loc> C:\Users\rascoussier\Anaconda3\envs\elastic-1\python.exe .\main.py
   A  B  C  D  E  F
0  1  4  7  1  5  7
1  2  5  8  3  3  4
2  3  6  9  5  6  3
Correction works, see below:
   A  B  C  D  E  F
0  1  4  7  1  5  7
Run Code Online (Sandbox Code Playgroud)

备注:我的示例与问题所提出的示例略有不同,但由于我在搜索时找到了此解决方案,因此它可能会帮助其他人解决相同的问题。

  • 谢谢你!!这种事经常发生在我身上,但总有一天早上我没有发现它...... (2认同)