TypeError: неверный тип операнда для унарного ~: 'float' - PullRequest
0 голосов
/ 08 февраля 2019

У меня странно выглядящий фрейм данных, который мне нужно спорить.Это выглядит примерно так:

   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), связанных с вопросом (например, country_statis).Я пытаюсь объединить country_satis в 1, чтобы у всех моих «блоков» было

0          Q2        country_satis  ...         NaN          NaN
1         NaN     country_statis_1  ...         NaN          NaN
2         NaN     country_statis_2  ...         NaN          NaN
3         NaN     country_statis_8  ...         NaN          NaN
4         NaN     country_statis_9  ...         NaN          NaN
5         NaN                  NaN  ...         NaN          NaN

Вот моя попытка:

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'

EDIT2:

Согласно Энди Хейдену, вы не могли бы помочь мне решить эту логику? Код работает нормально.У меня есть случай, когда 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

1 Ответ

0 голосов
/ 08 февраля 2019

Вы можете fillna сначала:

~df.REFERENCE_CODE.fillna('').str.isnumeric()

Пример:

In [11]: s = pd.Series(['1', np.nan, 'c'])

In [12]: s
Out[12]:
0      1
1    NaN
2      c
dtype: object

In [13]: s.str.isnumeric()
Out[13]:
0     True
1      NaN
2    False
dtype: object

In [14]: ~s.str.isnumeric()
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-14-2e51f8bd1622> in <module>()
----> 1 ~s.str.isnumeric()

~/.miniconda3/lib/python3.7/site-packages/pandas/core/generic.py in __invert__(self)
   1141     def __invert__(self):
   1142         try:
-> 1143             arr = operator.inv(com._values_from_object(self))
   1144             return self.__array_wrap__(arr)
   1145         except Exception:

TypeError: bad operand type for unary ~: 'float'

In [15]: ~s.fillna('').str.isnumeric()
Out[15]:
0    False
1     True
2     True
dtype: bool
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...