Строка фильтра и целочисленное значение из объекта Dataframe -python - PullRequest
3 голосов
/ 07 июля 2019

Я хочу реализовать операцию над файлом Excel в одном столбце, в котором столбец содержит строковые и целочисленные данные, но этот столбец имеет тип объекта

Мои данные выглядят в Excel: (Сочетание строки номер)

Time Spent
3600
0
None
1800
0

Я попробовал следующий код


if (df['Time Spent']=='None').all():
 df['Time Spent'] = 0
else:
 df['Time Spent'] = df['Time Spent'].astype('int')/3600

Ошибка, которую я получаю

Index([u'Issue Key', u'Issue Id', u'Summary', u'Assignee', u'Priority',
       u'Issue Type', u'Status', u'Tag', u'Original Estimate', u'Time Spent',
       u'Resolution Date', u'Created Date'],
      dtype='object')
Traceback (most recent call last):
  File "dashboard_migration_graph_Resolved.py", line 60, in <module>
    df['Time Spent'] = df['Time Spent'].astype('int')/3600
  File "/usr/lib64/python2.7/site-packages/pandas/util/_decorators.py", line 118, in wrapper
    return func(*args, **kwargs)


  File "pandas/_libs/lib.pyx", line 854, in pandas._libs.lib.astype_intsafe
  File "pandas/_libs/src/util.pxd", line 91, in util.set_value_at_unsafe
ValueError: invalid literal for long() with base 10: 'None'

Ответы [ 2 ]

3 голосов
/ 07 июля 2019

Используйте to_numeric с errors='coerce' для преобразования всех не чисел в пропущенные значения, поэтому добавьте Series.fillna перед делением:

df['Time Spent'] = pd.to_numeric(df['Time Spent'], errors='coerce').fillna(0)/3600
print (df)
   Time Spent
0         1.0
1         0.0
2         0.0
3         0.5
4         0.0

Еслинужно None вернуть обратно, как пропущенное значение, только удалить fillna - вместо этого None получить пропущенное значение NaN, поэтому возможно несколько столбцов:

df['Time Spent'] = pd.to_numeric(df['Time Spent'], errors='coerce')/3600
print (df)
   Time Spent
0         1.0
1         0.0
2         NaN
3         0.5
4         0.0
2 голосов
/ 07 июля 2019

Я не могу комментировать (из-за низкой репутации), но вы пробовали:

df['Time Spent'] = df['Time Spent'].replace('None', 0). astype(int)/3600

Надеюсь, это работает для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...