Как мне исправить ошибку этого типа («значение» должно быть экземпляром str или байтов, а не с плавающей точкой) на Python

#python #csv #matplotlib

#python #csv #matplotlib

Вопрос:

Я хочу построить график для Covid-19 в Индии, и пока нет проблем, когда я вручную ввожу свои данные по осям x и y. Но поскольку данные довольно длинные, и когда я хочу прочитать их как .csv-файл, он выдает мне эту ошибку «значение» должно быть экземпляром str или bytes, а не с плавающей точкой. Я также попытался обернуть int(corona_case), но, выдав мне еще одну новую ошибку, не удается преобразовать ряд в Также я был бы очень признателен, если бы кто-нибудь мог предложить мне учебные пособия по построению графика с использованием даты и времени с использованием python, поскольку я впервые изучаю python. Я использую Python 3.

p / s Я, кажется, не могу найти способ поделиться своим csv-файлом, поэтому я оставлю его во фрагменте.

 import pandas as pd
from datetime import datetime, timedelta
from matplotlib import pyplot as plt
from matplotlib import dates as mpl_dates
import numpy as np

plt.style.use('seaborn')

data = pd.read_csv('india.csv')
corona_date = data['Date']
corona_case = data['Case']
 
plt.plot_date (corona_date, corona_case, linestyle='solid')

plt.gcf().autofmt_xdate()

plt.title('COVID-19 in India')
plt.xlabel('Date')
plt.ylabel('Cumulative Case')

plt.tight_layout()

plt.show()  

 Date,Case
2020-09-30,6225763
2020-10-01,6312584
2020-10-02,6394068
2020-10-03,6473544
2020-10-04,6549373
2020-10-05,6623815
2020-10-06,6685082  

Комментарии:

1. можете ли вы поделиться с нами файлом CSV?

2. вы пробовали метод astype ? int(corona_case) не будет работать, потому что вы пытаетесь преобразовать серию pandas в int . Это не то, что вы хотите сделать, поскольку ваша цель состоит в том, чтобы каждое значение в ряду имело тип int . Взгляните на документацию, я бы предположил, что это решает проблему. pandas.pydata.org/docs/reference/api/pandas . Series.astype.html

3. data.astype({‘Case’: ‘int32’})

4. Ваш код отлично работает с предоставленным вами фрагментом. Должно быть, что-то не так с полным файлом?

5. @jmandt Я тоже пробовал метод astype. Но на этот раз это выдает мне эту ошибку ValueError: invalid literal for int() with base 10: '2020-01-30'. , я также отформатировал свою дату, но, похоже, ничего не работает.

Ответ №1:

преобразовать все столбцы фрейма данных в dtype int64

 df = df.astype(int)
  

преобразовать столбец «a» в dtype int64 и «b» в сложный тип

 `df = df.astype({"a": int, "b": complex})` 
  

преобразовать ряд в тип float16

 s = s.astype(np.float16) 
  

преобразование рядов в строки Python

 s = s.astype(str)
  

преобразовать ряды в категориальный тип — подробнее см. Документы

 s = s.astype('category')
  

Ответ №2:

Вы можете преобразовать тип столбца в pandas dataframe следующим образом.

 corona_case = data['case'].astype(int) # or str for string
  

Если это то, что вы пытаетесь сделать.

Комментарии:

1. Привет, я тоже видел и пробовал это раньше, это тоже выдало бы мне ошибку, ValueError: недопустимый литерал для int() с основанием 10: ‘ t’

2. это означает, что в столбце case есть символы, не являющиеся числами, в данном случае tab(‘ t’). Вы можете попробовать удалить эти символы. pd.to_numeric(data['case'], error='coerce') который преобразует числовые значения в строке в числа, а не числовые значения в null, а затем удаляет нулевые значения data.dropna(subset=['case']) .

3. Я пробовал это, но все равно выдает ошибку значения. Я думаю, что с моей датой столбца что-то не так, поскольку я ввел не числовые символы 2020-01-30 ValueError: недопустимый литерал для int() с основанием 10: ‘2020-01-30’.

4.Я также добавил эти 2 строки, но все равно выдал мне ту же ошибку. date_format = mpl_dates.DateFormatter('%b, %d, %Y') plt.gca().xaxis.set_major_formatter(date_format)

5. Pandas считывает дату и время в строковом формате из csv. Вы можете преобразовать его в datetime как data['Date'] = pd.to_datetime(data['Date']) , и это работает с matplotlib. Было бы лучше, если бы вы могли поделиться csv.

Ответ №3:

Я не мог дать дополнительную информацию, но это может сработать:

 corona_date = (data['Date']).astype(str)
corona_case = (data['Case']).astype(str)