TypeError:一元~“float”的操作数类型错误

2024-10-04 01:36:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个奇怪的数据帧,我需要争论。看起来像这样:

   Unnamed: 0       REFERENCE_CODE  ... Unnamed: 12  Unnamed: 13
0          Q2        country_satis  ...         NaN          NaN
1         NaN                    1  ...         NaN          NaN
2         NaN                    2  ...         NaN          NaN
3         NaN                    8  ...         NaN          NaN
4         NaN                    9  ...         NaN          NaN
5         NaN                  NaN  ...         NaN          NaN
6          Q3             econ_sit  ...         NaN          NaN
5         NaN                  NaN  ...         NaN          NaN
7         NaN                    1  ...         NaN          NaN
8         NaN                    2  ...         NaN          NaN
9         NaN                    3  ...         NaN             
10        NaN                    4  ...         NaN          NaN
11        NaN                    8  ...         NaN          NaN
12        NaN                    9  ...         NaN          NaN
13        NaN                  NaN  ...         NaN          NaN
14         Q4  children_betteroff2  ...         NaN  Не четете! 
15        NaN                    1  ...         NaN          NaN
16        NaN                    2  ...         NaN          NaN
15        NaN                  NaN  ...         NaN          NaN
18        NaN                    8  ...         NaN          NaN
19        NaN                    9  ...         NaN          NaN
20        NaN                  NaN  ...         NaN          NaN
21         Q5  satisfied_democracy  ...         NaN          NaN
22        NaN                    1  ...         NaN          NaN
23        NaN                    2  ...         NaN          NaN
24        NaN                    3  ...         NaN          NaN

(为了反映在这个非常长的数据帧中可能出现的内容,我在这里对原始数据进行了一些编辑)。我的目标是为与一个问题相关的每个值(例如1、2、8、9)生成一个唯一的ID(例如country_statis)。我正在尝试将country_satis连接到1,以便我的所有“块”都

^{pr2}$

以下是我的尝试:

df.REFERENCE_CODE = df.REFERENCE_CODE.fillna('')

df.REFERENCE_CODE.str.isnumeric().dtype # returns object

headers = (df.REFERENCE_CODE != '') & ~df.REFERENCE_CODE.str.isnumeric()

res = df.groupby(headers.cumsum())['REFERENCE_CODE'].apply(lambda x: x.iloc[0] + '_' + x)

df.REFERENCE_CODE.update(res[df.REFERENCE_CODE.str.isnumeric()])

我在这里的目标也是保持数据的完整性和结构,因为最终,理想情况下,我希望执行两个数据源的干净合并。我应该在SQL lol中这样做

此处出错:

Traceback (most recent call last):
  File "/Users/xx/Projects/trend_env/src/script4.py", line 10, in <module>
    df.REFERENCE_CODE = df.REFERENCE_CODE.fillna('')
  File "/Users/xx/Projects/trend_env/lib/python3.7/site-packages/pandas/core/generic.py", line 5067, in __getattr__
    return object.__getattribute__(self, name)
AttributeError: 'DataFrame' object has no attribute 'REFERENCE_CODE'

编辑:

很抱歉,我发布了错误的脚本。。以下是错误消息:

Traceback (most recent call last):
  File "/Users/xxx/Projects/trend_env/src/script4.py", line 16, in <module>
    headers = (df.REFERENCE_CODE != '') & ~df.REFERENCE_CODE.str.isnumeric()
  File "/Users/xxx/Projects/trend_env/lib/python3.7/site-packages/pandas/core/generic.py", line 1466, in __invert__
Index(['Question number', 'REFERENCE_CODE', 'Filter', 'English stem',
       'Translator note', 'Philippines - Bicolano', 'Philippines - Cebuano',
       'Philippines - Ilonggo', 'Philippines Ilokano', 'Philippines - Tagalog',
       'Unnamed: 10', 'Unnamed: 11', 'Unnamed: 12', 'Unnamed: 13'],
      dtype='object')
    arr = operator.inv(com.values_from_object(self))
TypeError: bad operand type for unary ~: 'float'

编辑2:

按照安迪·海登的说法——你介意帮我解决这个逻辑。。我的代码运行得很好。我有一个案例,df是这样的:

25                     partyfav_batt                   NaN
26            partyfav_bulgaria_GERB                   NaN
27             partyfav_bulgaria_BSP                   NaN
28             partyfav_bulgaria_DPS                   NaN
29                                                     NaN
30           partyfav_bulgaria_DPS_1                   NaN
31           partyfav_bulgaria_DPS_2                   NaN
32           partyfav_bulgaria_DPS_3                   NaN
33           partyfav_bulgaria_DPS_4                   NaN
34           partyfav_bulgaria_DPS_8                   NaN
35           partyfav_bulgaria_DPS_9                   NaN
36                                                     NaN
37                     partyfav_batt                   NaN
38               partyfav_canada_Lib                   NaN
39              partyfav_canada_Cons                   NaN
40               partyfav_canada_NDP                   NaN
41                                                     NaN
42             partyfav_canada_NDP_1                   NaN
43             partyfav_canada_NDP_2                   NaN
44             partyfav_canada_NDP_3                   NaN
45             partyfav_canada_NDP_4                   NaN
46             partyfav_canada_NDP_8                   NaN
47             partyfav_canada_NDP_9                   NaN

我怎样才能得到它,这样如果它看到一大块。。。在

37                     partyfav_batt                   NaN
38               partyfav_canada_Lib                   NaN
39              partyfav_canada_Cons                   NaN
40               partyfav_canada_NDP                   NaN

变成这样(我把它浓缩了):

39              partyfav_canada_Cons                   NaN
40               partyfav_canada_NDP                   NaN
41                                                     NaN
42            partyfav_canada_Cons_1                   NaN
43            partyfav_canada_Cons_2                   NaN
44            partyfav_canada_Cons_3                   NaN
45            partyfav_canada_Cons_4                   NaN    
42             partyfav_canada_NDP_1                   NaN
43             partyfav_canada_NDP_2                   NaN
44             partyfav_canada_NDP_3                   NaN
45             partyfav_canada_NDP_4                   NaN

Tags: dfobjectcodenanreferencestrconscanada